redis系列一

1、key的命名规则,采用数据库:表:业务:*的形式(例如:db0:user:pay:782178504)

好处:命名规范可以很好的会意
      方便之后监控,防止数据倾斜
复制代码

2、各数据结构注意(以下都是针对value,key都是string类型的)

string
    int:8个字节的长整型
    embstr:小于等于39个字节的字符串
    raw:大于39个字节的字符串
hash
    ziplist:元素个数<512(hash-max-ziplist-entries)&&value<64字节(hash-max-ziplist-value)
    hashtable:反之
list
    quicklist:3.2之后新增,结合了ziplist和linkedlist的优势
    ziplist:元素个数<512(list-max-ziplist-entries)&&value<64字节(list-max-ziplist-value)
    linkedlist:反之
set
    intset:元素都是整数 && 个数<512(set-max-intset-entries)
    hashtable:反之
zset
    ziplist:元素个数<128(zset-max-ziplist-entries)&&value<64字节(zset-max-ziplist-value)
    skiplist:反之
以上数据结构在使用时,尽量使用顺序在前的结构,可以减少内存的使用。

最后再解释一下为什么string中value小于等于39字节内部编码会使用embstr?
    redis默认的内存分配器采用jemalloc,分配内存策略一般采用固定范围的内存块进行分配。在64位系统中,
    分为小、大、巨三个范围
    最小分配:8,16,32,64byte分配
    redis存储的数据都使用redisObject来封装
    embstr由RedisObject和sdshdr组成。
    typedef struct redisObject {//16byte
        unsigned type:4;
        unsigned encoding:4;
        unsigned lru:REDIS_LRU_BITS; 
        int refcount;
        void *ptr;
    } robj;
    struct sdshdr {//8+8+1+?
        unsigned int len;
        unsigned int free;
        char buf[];
    };
    16+8+1=25+8=33,所有最小分配64字节,39=64-16-8-1
    注意在redis3.2版本之后是44个字节复制代码

转载于:https://juejin.im/post/5bad892df265da0ab673c760

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值