一、 键值设计

  1. key 名称设计
    (1) 可读性和可管理性
便于查看,统计,排错

(2)简洁性,控制key长度

在保证语义的前提下,尽量控制key的长度

(3)不要包含特殊字符

禁止包含特殊字符如空格,换行,单双引号,其他转义字符
  1. value 设计
    (1)不宜过大,越小越好
    string类型控制在1KB以内,hash/list/set/zset等包含元素个数控制在1000以内
    credis页面,群集所有者可以通过unlink异步清理或小批量迭代清理
(2)一定要设置过期时间,当实例写满,根据volatile-lru淘汰老的数据

   不设置过期时间,redis实例大小会一直无限增长,会出现机器内存耗尽、故障恢复耗时特别长等问题

3.实例Key个数限制

由于Redis Rehash机制,实例Key数量达到一定值rehash操作时,需要有一定量空闲内存资源,如key达到134217728,rehash需要有2gb空闲内存资源,达到268435456时,rehash需要有4gb空闲内存资源。如果没有组够的内存资源rehash时会发生Key剔除(数据丢失/程序超时/甚至引起切换)。

单实例key个数达到134217728已经很大了,实例元素过大对于后续分析rdb遍历大key时会非常耗时。

4.设置合理的过期时间。

Redis只是缓存,不能当成数据库来用。所有key应该根据业务场景,设置合理过期时间,也可以提升资源利用率。

二、 命令使用

  1. 禁用KEYS 正则匹配,可用SCAN代替
    容易阻塞正常读写请求,甚至主从切换
  2. O(N)命令关注N,控制集合元素尽可能小
    hgetall/lrange/smembers/zrange等在集合包含元素个数较少的情况下使用,
    若规模较大,有遍历需求,可用HSCAN/SSCAN/ZSCAN渐进式遍历
  3. 禁用KEYS/FLUSHDB/FLUSHALL等命令
    防止误操作,造成生产事故
  4. Redis事务支持较弱,不建议过多使用
    不支持回滚

三、 参数配置

  1. 服务端配置

(1)同一个分片的主从节点,部署在不同机柜的不同宿主机,最大程度保障实例故障时数据不丢失。

(2)单个实例不宜过大,一般在控制8GB以内,生产环境单个实例大小禁止超过30GB。15GB+不自动扩容。TROCKS由于底层存储使用ROCKSDB,以及为了节省成本,实例可以更大一些,根据当时申请规格来。

(3)影响下单主流程的核心Redis要有DR(Disaster Recovery https://redis.com/redis-enterprise/technology/backup-disaster-recovery/)

(4)Redis 服务器参数配置

echo 2048 > /proc/sys/net/core/somaxconn

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    sysctl vm.overcommit_memory=1

    echo 0 > /proc/sys/vm/swappiness