• Redis基本类型之zset


    累了,学点轻松的,参考《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使用了特殊的数据结构————跳表。

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

  • 相关阅读:
    IOS 网络请求中设置cookie
    七牛云存储 报错的问题
    理解RESTful架构
    关于APP接口设计
    WKWebView与Js实战(OC版)
    WKWebView API精讲(OC)
    iOS完整App资源收集
    WKWebView新特性及JS交互
    苹果app审核的规则总结
    Struts2实现文件的上传与动态下载功能。
  • 原文地址:https://www.cnblogs.com/lyhero11/p/15767257.html
Copyright © 2020-2023  润新知