ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis基本类型之zset

2022-01-05 15:39:26  阅读:171  来源: 互联网

标签:Java zset Redis 链表 122.51 books 112.187 类型 7003


累了,学点轻松的,参考《Redis深度历险:核心原理与应用实践》。Redis yyds,高学习回报的技术。然后今天感觉我还是想做银行业的技术开发。老这么做外包式的技术没行业业务经验的提高,至于为何弯路如此,那是一言难尽了。

zset有序集合是Redis的特色数据结构,本身是一个集合,里边元素不会重复,而且还可以绑定一个score,可以按照分数进行排序。zset底层使用了跳表这种数据结构实现。

zset基本方法

zadd 向zset添加元素 zadd key score member:
[root@VM_0_11_centos ~]# redis-cli -c -p 7001 -a password
127.0.0.1:7001> zadd books 9.0 "thinkin Java"
-> Redirected to slot [15901] located at 122.51.112.187:7003
(integer) 1
122.51.112.187:7003> zadd books 8.9 "Java concurrency"
(integer) 1
122.51.112.187:7003> zadd books 8.6 "Netty in Action"
(integer) 1

zrange 遍历zset, 分数从小到大返回所有元素, 分数是double类型:
122.51.112.187:7003> zrange books 0 -1

  1. "Netty in Action"
  2. "Java concurrency"
  3. "thinkin Java"
    0 -1表示从第0个开始到倒数第1个,也就是所有.

zrevrange 倒序遍历
122.51.112.187:7003> zrevrange books 0 -1

  1. "thinkin Java"
  2. "Java concurrency"
  3. "Netty in Action"

zcard 集合里有多少个元素zcard:
122.51.112.187:7003> zcard books
(integer) 3

zscore 获取某个元素的分数zscore:
122.51.112.187:7003> zscore books "Netty in Action"
"8.5999999999999996"

zrank 某个元素排名第几,从0开始:
122.51.112.187:7003> zrank books "Netty in Action"
(integer) 0

zrangebyscore 按分数区间返回元素 -inf表示负无穷:
122.51.112.187:7003> zrangebyscore books -inf 8.91

  1. "Netty in Action"
  2. "Java concurrency"
    122.51.112.187:7003> zrangebyscore books -inf 8.91 withscores
  3. "Netty in Action"
  4. "8.5999999999999996"
  5. "Java concurrency"
  6. "8.9000000000000004"

zrem 删除元素zrem
122.51.112.187:7003> zrem books "Java concurrency"
(integer) 1
122.51.112.187:7003> zrange books 0 -1

  1. "Netty in Action"
  2. "thinkin Java"
跳表,zset的底层实现

首先,zset需要支持随机的插入和删除,数组随机读比较好、插入和删除有大量的复制开销,所以不太适合。那只能选链表了,如果是普通的链表,想象一下一个排序好的链表新增一个元素,需要从头遍历到合适的插入位置进行插入,效率低,二分法也没法用、因为是数组用的。所以Redis使用了特殊的数据结构————跳表。

跳跃列表在原来链表的基础上,每隔几个元素选出来几个作为“上层”元素,然后用另外的指针链接起来形成上层链表,然后从上层链表里再选几个元素形成上上层链表,等等。查找插入点的时候从最上层链表开始定位,逐步缩小查找范围,最后找到插入点。

标签:Java,zset,Redis,链表,122.51,books,112.187,类型,7003
来源: https://www.cnblogs.com/lyhero11/p/15767257.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有