有序集合类型的内部编码有两种,它们分别是:
- ziplist(压缩列表):当有序集合的元素个数小于 128 个(默认设置),同时每个元素的值都小于 64 字节(默认设置),Redis 会采用 ziplist 作为有序集合的内部实现。
- skiplist(跳跃表):当上述条件不满足时,Redis 会采用 skiplist 作为内部编码。
备注:上述中的默认值,也可以通过以下参数设置:zset-max-ziplist-entries 和 zset-max-ziplist-value。
下面我们用以下示例来验证上述结论。
当元素个数比较少,并且每个元素也比较小时,内部编码为 ziplist:
当元素个数超过 128 时,内部编码为 skiplist。下面我们将采用 python 动态创建128个元素,下面为源码:
- import redis
- r = redis.Redis(host='127.0.0.1', port=6379)
- if r.object('encoding', 'zsetkey') != None:
- print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8'))
- for i in range(1, 600):
- r.zadd('zsetkey',i,1)
- if r.object('encoding', 'zsetkey') != None:
- print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8'))
- Key为【zsetkey】的字节编码为【ziplist】
- Key为【zsetkey】的字节编码为【skiplist】
当有序集合中有任何一个元素大于 64 个字节时,内部编码为 skiplist。
- import redis
- r = redis.Redis(host='127.0.0.1', port=6379)
- if r.object('encoding', 'zsetkey') != None:
- print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8'))
- value = ''
- for i in range(1, 600):
- value += str(i)
- r.zadd('zsetkey',value,1)
- if r.object('encoding', 'zsetkey') != None:
- print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8'))
- Key为【zsetkey】的字节编码为【skiplist】
到这里,本文就结束了,写了这么多,其实主要大部分是关于命令的简单介绍,其中也介绍了一些关键要点,如有不正确的地方,欢迎留言。
【编辑推荐】
- 想用数据库“读写分离” 请先明白“读写分离”解决什么问题
- 如何为双活Redis Enterprise搭建基于Docker的开发环境?
- 数据库常用的事务隔离级别都有哪些?都是什么原理?
- Redis 5.0正式发布!引入流数据类型
- Redis的各项功能解决了哪些问题?
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|