Redis基本类型-列表类型

  1. Java 操作列表类型(类似于LinkedList)
    1. 用处
    2. 深入

Java 操作列表类型(类似于LinkedList)

  • 在列表头部添加数据: jedis.lpush("list", "xiaoming","age","20","address","beijing");
  • 在列表尾部添加数据: jedis.rpush("height","170cm","hobby","dance");
  • 列表长度: jedis.llen("list")
  • 列表list下标为2的元素: jedis.lindex("list",2);
  • 移除一个元素: jedis.lrem("list",1,"age")
  • 将列表key下标为index的元素值设置为value: jedis.lset("list",5,"hello world");
  • 移除并返回list尾元素: jedis.rpop("list");
  • 取值
    1
    2
    3
    4
    List<String> list = jedis.lrange("list",0,-1);
    for(String str:list){
    System.out.println(str);
    }

用处

  • 简单的消息队列
  • 利用lrange命令,做基于redis的分页功能

深入

  • Redis底层存储是”快速链表(quickList)”结构
    • 列表元素较少的情况下,会使用一块连续的内存存储,这个结构是ziplist(压缩列表)。
    • 数据量多时改为quicklist。
    • Redis将链表和ziplist结合起来组成了quicklist,将多个ziplist使用双向指针串起来使用
    • 使用List作为异步消息队列
      • 问题1: 队列空了怎么办?

            
        当队列为空时,客户端就会陷入空轮询的pop->无数据->pop的死循环中。
        所以采用堵塞读方法 blpopbrpop
        堵塞读在队列没有数据时,会立即进入休眠状态,一旦数据到来,则立刻醒过来。消息延迟几乎为0
      • 问题2: 空闲链接自动断开

            
        如果线程一直堵塞在那里,Redis的客户端就成了闲置连接,闲置过久,服务器一般会主动断开,减少闲置资源占用。
        这时blpop/brpop会抛出异常。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yanglau0527@gmail.com

文章标题:Redis基本类型-列表类型

文章字数:442

本文作者:Cynaith

发布时间:2020-05-02, 02:19:04

最后更新:2020-05-02, 02:21:03

原始链接:https://cynaith.github.io/2020/05/02/Redis%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B-%E5%88%97%E8%A1%A8%E7%B1%BB%E5%9E%8B/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏