加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 海宁网 (https://www.hainingwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Redis避不开的五种数据结构

发布时间:2018-10-30 17:53:33 所属栏目:编程 来源:编辑部的故事
导读:Redis 中有 5 种数据结构,分别是字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),因为使用 Redis 场景的开发中肯定是无法避开这些基础结构的,所以熟练掌握它们也就成了一项必不可少的能力。本文章精要地介绍了 Redis 的这几

有序集合类型的内部编码有两种,它们分别是:

  • ziplist(压缩列表):当有序集合的元素个数小于 128 个(默认设置),同时每个元素的值都小于 64 字节(默认设置),Redis 会采用 ziplist 作为有序集合的内部实现。
  • skiplist(跳跃表):当上述条件不满足时,Redis 会采用 skiplist 作为内部编码。

备注:上述中的默认值,也可以通过以下参数设置:zset-max-ziplist-entries 和 zset-max-ziplist-value。

下面我们用以下示例来验证上述结论。

当元素个数比较少,并且每个元素也比较小时,内部编码为 ziplist:

Redis避不开的五种数据结构

当元素个数超过 128 时,内部编码为 skiplist。下面我们将采用 python 动态创建128个元素,下面为源码:

  1. import redis  
  2. r = redis.Redis(host='127.0.0.1', port=6379)  
  3. if r.object('encoding', 'zsetkey') != None:  
  4. print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8')) 
  5. for i in range(1, 600):  
  6. r.zadd('zsetkey',i,1)  
  7. if r.object('encoding', 'zsetkey') != None:  
  8. print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8'))  
  9. Key为【zsetkey】的字节编码为【ziplist】  
  10. Key为【zsetkey】的字节编码为【skiplist】 

当有序集合中有任何一个元素大于 64 个字节时,内部编码为 skiplist。

  1. import redis  
  2. r = redis.Redis(host='127.0.0.1', port=6379)  
  3. if r.object('encoding', 'zsetkey') != None:  
  4. print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8'))  
  5. value = ''  
  6. for i in range(1, 600):  
  7. value += str(i)  
  8. r.zadd('zsetkey',value,1)  
  9. if r.object('encoding', 'zsetkey') != None:  
  10. print('Key为【zsetkey】的字节编码为【%s】' % r.object('encoding', 'zsetkey').decode('utf-8'))  
  11. Key为【zsetkey】的字节编码为【skiplist】 
Redis避不开的五种数据结构

到这里,本文就结束了,写了这么多,其实主要大部分是关于命令的简单介绍,其中也介绍了一些关键要点,如有不正确的地方,欢迎留言。

【编辑推荐】

  1. 想用数据库“读写分离” 请先明白“读写分离”解决什么问题
  2. 如何为双活Redis Enterprise搭建基于Docker的开发环境?
  3. 数据库常用的事务隔离级别都有哪些?都是什么原理?
  4. Redis 5.0正式发布!引入流数据类型
  5. Redis的各项功能解决了哪些问题?
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:财气旺网 - 海宁网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!