汇总一下QA日常工作中经常用到的redis命令,以及通过redisson动态切换连接redis集群。
工作中使用最多的就是开启客户端、查询key对应的value以及过期时间
1、开启普通客户端
# 连接非集群命令,这种方式密码直接暴露在命令行不安全,如果密码包含特殊符号需要进行转义,否则会报错 ./redis-cli -h host -p port -a password2、开启集群客户端
# 连接进群命令,需要加-c参数 表示以集群的方式连接,如果密码包含特殊符号需要进行转义,否则会报错 ./redis-cli -h host -p port -a password -c1、获取过期时间
# 在第二步开启的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 stop3、批量删除特定的key
./redis-cli -h host -p port -a password keys "*test*" | xargs ./redis-cli -h host -p port -a password delAll data transferred. Waiting for the last reply… Last reply received from server. errors: 0, replies: 2
有多套集群环境时需要动态切换,切换主要是方便对不同环境的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集群参数配置参考:集群配置