汇总一下QA日常工作中经常用到的redis命令,以及通过redisson动态切换连接redis集群。
一、redis相关介绍
- redis是什么
REmote DIctionary Server(Redis) 是一个开源的key-value存储系统,主要用于数据库、缓存、消息中间件。 - redis数据类型
Redis支持五种数据类型:字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)。
二、常用命令总结
工作中使用最多的就是开启客户端、查询key对应的value以及过期时间
开启客户端命令
1、开启普通客户端
# 连接非集群命令,这种方式密码直接暴露在命令行不安全,如果密码包含特殊符号需要进行转义,否则会报错
./redis-cli -h host -p port -a password
2、开启集群客户端
# 连接进群命令,需要加-c参数 表示以集群的方式连接,如果密码包含特殊符号需要进行转义,否则会报错
./redis-cli -h host -p port -a password -c
常用命令
1、获取过期时间
# 在第二步开启的redis客户端里面执行
ttl key
返回结果说明:
-2:表示key不存在
-1:表示key存在但是没有设置过期时间
其它数值:表示key的剩余生存时间,单位是秒
2、获取key对应的value
- 字符串(String)类型,使用命令:get key
- 哈希(Hash)类型,使用命令:hget key field(获取存储在哈希表中指定字段的值) 或 hgetall key(获取在哈希表中指定 key 的所有字段和值)
- 列表(List)类型,使用命令:LRANGE key start stop,说明获取start到stop范围内的元素
- 集合(Set)类型,使用命令:SMEMBERS key
- 有序集合(Sorted Set)类型,使用命令:ZRANGE key start stop
3、批量删除特定的key
./redis-cli -h host -p port -a password keys "*test*" | xargs ./redis-cli -h host -p port -a password del
三、Redis从文件中批量插入数据
- 创建文件
说明:将需要批量插入的命令保存为文本文件,文件中的空行必须要有,否则会报错set key0 value0 set key1 value1
- 转码
由于redis-cli只支持dos格式的换行符\r\n,所以说建议转码mac、linux、windows上面创建的文件,转码命令unix2dos redis.txt
- 执行导入
导入的指令较多,建议使用–pipe 参数启用pipe协议,不仅能减少返回结果的输出,而且还能更快的执行指令
看到结果中errors为0表示全部成功cat redis.txt | /redis/src/redis-cli -h 127.0.0.1 -p 6379 -a password --pipe
All data transferred. Waiting for the last reply…
Last reply received from server.
errors: 0, replies: 2
四、redisson动态切换连接集群
有多套集群环境时需要动态切换,切换主要是方便对不同环境的key值查询,通过提供界面传入key、集群名称以及数据类型三个参数就可以查询结果,下面是redisson工具类实现的全部代码,在此工具类的基础上实现redis读取操作即可。
public class RedissonUtil {
private static final Logger logger = LoggerFactory.getLogger(RedissonUtil.class);
private static Config config;
private RedissonUtil() {
throw new IllegalStateException("Utility class");
}
private static Config getConfig(String src) {
try {
// 读取redis集群的配置文件
config = Config.fromYAML(new File(src));
} catch (IOException e) {
logger.error("read config file error", e);
}
return config;
}
private static RedissonClient createClient(Config config) {
config.useClusterServers().setLoadBalancer(new RoundRobinLoadBalancer());
// 设置解码类型,和写入时的编码保持一致就可以
config.setCodec(new SnappyCodec());
logger.info("redis connect success");
return Redisson.create(config);
}
public static RedissonClient getClient(String clusterName) {
config = getConfig("src/main/config/redisson-" + clusterName + ".yaml");
return createClient(config);
}
public static void closeClient(RedissonClient redissonClient) {
// 请求完成之后关闭链接
redissonClient.shutdown();
logger.info("redis already close!!!");
}
}
redis集群配置的yaml文件格式,文件名格式:redisson-" + clusterName + “.yaml”
---
clusterServersConfig:
idleConnectionTimeout: 1000
pingTimeout: 1000
# connectTimeout: 10000
# timeout: 3000
# retryAttempts: 3
# retryInterval: 1500
# reconnectionTimeout: 3000
# failedAttempts: 3
password: "password"
# subscriptionsPerConnection: 5
# clientName: null
# slaveSubscriptionConnectionMinimumIdleSize: 1
# slaveSubscriptionConnectionPoolSize: 50
# slaveConnectionMinimumIdleSize设置为1,设置较大的话创建连接数量很多,请求频繁会导致服务器报打开文件数太多的错误,如果是正式服务需要评估
slaveConnectionMinimumIdleSize: 1
slaveConnectionPoolSize: 64
masterConnectionMinimumIdleSize: 1
masterConnectionPoolSize: 32
readMode: "SLAVE"
nodeAddresses:
- "redis://127.0.0.1:16371"
- "redis://127.0.0.1:16372"
- "redis://127.0.0.1:16373"
threads: 5
nettyThreads: 222
transportMode: "NIO"
redis集群参数配置参考:集群配置