QA技能--redis日常使用总结

    技术2022-07-14  72

    汇总一下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协议,不仅能减少返回结果的输出,而且还能更快的执行指令cat redis.txt | /redis/src/redis-cli -h 127.0.0.1 -p 6379 -a password --pipe 看到结果中errors为0表示全部成功

    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集群参数配置参考:集群配置

    Processed: 0.012, SQL: 9