美文网首页数据库
redis04(link链表结构与命令详解)

redis04(link链表结构与命令详解)

作者: 机智的老刘明同志 | 来源:发表于2018-09-21 00:59 被阅读32次

link链表

        Redis 的列表相当于 Java 语言里面的 LinkedList,注意它是链表而不是数组。这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n),这点让人非常意外。

        当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。

        Redis 的列表结构常用来做异步队列使用。将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理。...

快速列表

        如果再深入一点,你会发现 Redis 底层存储的还不是一个简单的 linkedlist,而是称之为快速链表 quicklist 的一个结构。

        首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成 quicklist。因为普通的链表需要的附加指针空间太大,会比较浪费空间,而且会加重内存的碎片化。比如这个列表里存的只是 int 类型的数据,结构上还需要两个额外的指针 prev 和 next 。所以 Redis 将链表和 ziplist 结合起来组成了 quicklist。也就是将多个 ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。...

        //压缩链表内部和快速链表内部。水平境界目前有限,底层原理暂时不深入

        https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5b5c95226fb9a04fa42fc3f6

        https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5b5c963be51d45199154e82e

lpush  key value1 value2 value3  

左侧插入

rpush  key value1 value2 value3  

右侧插入

lrange list 0 -1

查看链表  左侧 0 , 右侧-1 

rpop  value

删除最右边的元素,并弹出

lrem  count  value    

链表删除,删除count个value  

count > 0 从表头删除,count < 0 从表尾删除

ltrim  key  start  stop

截取一段链表

lindex   key   index 

返回下标index上的值。index 可以为负数,index=-1表示倒数第一个元素,同样index=-2表示倒数第二个元素。

llist  key 

返回链表的长度

linsert  key  after|before  serach  value

开始搜索serach值,找到第一个serach值后,在第一个search值前|后插入value

rpoplpush  source  dest

把source的尾部拿出放在dest的头部,形成一个安全的双向链表

BITOP AND res key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到res

BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到res 

BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到res

BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到res

记录一亿人每天登录情况:

1 一亿人每天登录情况用一亿bit记录约为1200W byte,约等于 10M 就可以存储

2 计算方便

相关文章

  • redis04(link链表结构与命令详解)

    link链表 Redis 的列表相当于 Java 语言里面的 LinkedList,注意它是链表而不是数组。这意味...

  • BM100 设计LRU缓存结构

    基本思想:hash结构m_db存储key-value。链表结构m_link存储最近set的key值,key值在链表...

  • redis常用命令

    与key相关的命令 String类相关命令 List类相关操作,list是一个链表结构,既可模拟队列结构,也可模拟...

  • 2018-06-20

    二,LinkedHashMap详解 LinkedHashMap底层数据结构由链表和哈希表组成。由链表保证元素有序。...

  • 数据结构和算法

    1.哈希表哈希算法详解(附带 iOS 开发中实际应用) 2.链表iOS 数据结构之链表

  • Redis学习笔记(一)

    Redis常用数据结构包括string、link、set、order set、hash 一、string结构及命令...

  • 3.单链表反向查找

    题目:已知一个带有附加头节点的单链表,节点结构为(data,link)。假设该链表只给出了头指针first。在不改...

  • redis笔记(三)link 链表结构

    lpush key value 作用: 把值插入到链表头部lpush word A lrpush key valu...

  • 二叉树

    链表:1.引用对象Link alink = someLink 和 Link someLine = new Link...

  • android LinkedList

    LinkedList是基于链表实现的,它的数据结构可以表示为下图 这里的data每个都是一个Link对象,它的结构...

网友评论

  • 平台小王子:最后面这个几亿人登陆这个操作没看懂,能详细一点么?

本文标题:redis04(link链表结构与命令详解)

本文链接:https://www.haomeiwen.com/subject/ewvonftx.html