Jedis、redis安全、Lua脚本、其他命令

本文深入探讨了Redis的安全措施,包括指令、端口、密码、Lua脚本、启动身份及SSL代理的安全配置,并介绍了Lua脚本的高效使用方法,以及通过info指令监控Redis性能和状态的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jedis、redis安全、Lua脚本、其他命令

Jedis的使用

基本用法:首先new一个jedispool,然后getResource取到jedis即可,最后jedis要关闭连接。

为了防止发生异常导致jedis没有关闭引发的连接池内连接数不够,要把close语句放在finally块里或者用trywithresource都可以。

有时出现网络抖动会导致redis自动断开连接,此时可以将执行代码异常catch住然后继续执行。

redis安全和spiped

指令安全:有些指令会造成重大的影响,如keys、flushall、flushdb,可以在配置文件中做一些配置来替换这些指令的使用方式或者干脆禁止使用。

端口安全:不要用默认端口6379,使用一个新的

密码安全:可以给redis设置密码

Lua脚本安全:禁止用户生成Lua脚本

启动身份:禁止redis以root的身份启动,而是普通用户的身份

SSL代理:redis客户端和服务端直接的交互有被窃取的危险,应该使用ssh,或者redis官方推荐工具spiped,它对ssh通道进行二次加密,信息传输更安全。

spiped是一款SSL代理软件,它会在客户端和服务端各自启动一个进程,客户端进程负责接收来自客户端的信息并加密后传给服务端spiped进程,解密后再传给服务端,相互之间需要使用共享秘钥来加密。客户端可以使用一个spiped来向多个服务端传输数据,但服务端必须各自配置一个spiped。

Lua脚本

用户可以向服务器发送Lua脚本来执行自定义动作,redis服务会单线程执行脚本。如果脚本很长经常传输,效率很低,还可以使用特殊指令让服务端缓存该脚本并得到脚本ID,然后客户端每次发送ID就可以执行该脚本。如果Lua脚本执行错误,之前执行过的效果也不会回滚。

如果脚本进入死循环,redis提供了一个命令:script kill强制杀死该脚本,前提是该脚本没有对redis内存进行修改,否则执行会返回错误。之所以可以杀死,是因为在执行脚本的时候会定期执行某个钩子函数,所以redis才可能执行script kill指令

info指令

info指令可以获取所有的信息,infor + 模块名可以获取对应模块的信息。

infor stats 可以查询redis每秒执行多少指令

redis-cli monitor 可以查询那些key访问最频繁

info clients 可以查连接了多少redis客户端

client list可以查都是什么链接了redis客户端

info memory可以查看redis占用了多少内存,确定是否需要集群化

info replication 可以查看复制积压缓冲区大小,它严重影响主从复制的效率,如果修改指令频繁应该将缓冲区设置大一点。

还可以查看主从半同步复制失败的次数。

其他命令

它可以定向将结果输出到文件。

选择命令发送的地址和库号。

批量执行命令

重复执行指令多次

将多行字符串set进去

执行脚本文件

监控服务器状态

扫描大key: bigkeys

采样服务器指令,判断哪个业务性能消耗最大

诊断服务器时延,可以诊断出是不是有卡顿(可以和ping的速度对比,如果差很多就说明redis执行时有卡顿)

远程备份

模拟从库,观察主从复制

转载于:https://www.cnblogs.com/shizhuoping/p/11526155.html

### Java执行Redis Lua脚本的方法及示例 在Java中可以通过Jedis库或其他Redis客户端来实现Lua脚本的执行。以下是详细的说明和代码示例。 #### 方法概述 Java程序可以利用`EVAL`或`EVALSHA`命令Redis发送Lua脚本并执行它。其中,`EVAL`用于直接传递Lua脚本内容,而`EVALSHA`则通过脚本哈希值调用已加载的脚本[^2]。为了确保高效运行,通常推荐先使用`SCRIPT LOAD`将脚本上传至Redis服务器,再通过其返回的SHA1哈希值多次调用该脚本。 #### Jedis库支持 Jedis是一个流行的Java Redis客户端库,提供了对Lua脚本的支持。开发者可以直接通过Jedis对象调用`eval`方法传入Lua脚本及其参数[^3]。 #### 示例代码 以下是一段完整的Java代码示例,展示了如何通过Jedis执行Redis上的Lua脚本: ```java import redis.clients.jedis.Jedis; public class RedisLuaExample { public static void main(String[] args) { // 创建Jedis连接实例 try (Jedis jedis = new Jedis("localhost", 6379)) { // 定义一个简单的Lua脚本字符串 String luaScript = "return {KEYS[1], ARGV[1]}"; // 使用 eval 方法执行Lua脚本 Object result = jedis.eval(luaScript, java.util.Collections.singletonList("myKey"), java.util.Collections.singletonList("hello")); // 输出结果 System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } } ``` 此代码片段创建了一个与本地Redis服务器的连接,并定义了一段简单的Lua脚本,该脚本接受一个键名作为输入并将之连同另一个参数一起返回。 #### 注意事项 - **环境配置**:确保项目中已经引入了Jedis依赖项。如果使用Maven构建工具,则需添加如下依赖到pom.xml文件中: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.0.0</version> </dependency> ``` - **跨平台差异**:对于Windows操作系统下的某些特殊场景(例如涉及外部文件读取),可能需要注意具体的命令行工具兼容性问题[^4]。 #### 性能优化提示 当频繁调用同一段Lua脚本时,考虑采用`SCRIPT LOAD`预加载方式以减少每次传输整个脚本带来的开销[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值