点击上方蓝字 关注我
1
不知道昨天讲完了Redis的strings之后大家感觉如何,那些命令有没有都尝试一下,然后有人问我那200多个命令是不是都需要记住,其实个人觉得必要不是很大,但是大概都要了解是必须的,不能说你接触一个设计的时候因为不知道redis的某些方面而和她擦肩而过,采用了别的相对不够便捷的设计方案,这样就不好了。
这里在补充一个Redis的知识点,Redis的string不要和c语言的字符串混淆,这是Redis自己实现的一种抽象类型,simple dynamic string简称sds,我们现在做一个最简单的操作,就是在redis-cli中,我们做最简单的set leslie handsome,这个时候键值对的键是一个字符串对象,对象的底层实现的一个保存着"leslie"的的sds,键值对的值也是一个字符串对象,对象的底层实现是一个保存着“handsome”的sds。
SDS不只是单纯的用来保存Redis数据库中的字符串值,还被用作缓冲区,AOF模块的AOF缓冲区,客户端状态的输入缓冲区,都是SDS实现的。关于SDS的具体作用和其与C字符串的区别,我们回头单独讲,还是很有意思的。
2
今天要讲的是另外一种数据结构list,也就是链表,在Redis的实现里,占有举足轻重的地位,列表键,发布和订阅,慢查询,监视器都是用链表实现的,等我们讲到各种功能的时候再一一讲解。
Redis的链表实现其实是一个双端链表,每个链表节点是有一个listNode结构来表示的,每个节点都有一个指向前置节点和后置节点的的指针。我们通过为链表设置不用的类型特定函数,就可以让Redis的链表保存不用的数据类型。
3
1 BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
2 BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3 BRPOPLPUSH source destination timeout
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4 LINDEX key index
通过索引获取列表中的元素
5 LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
6 LLEN key
获取列表长度
7 LPOP key
移出并获取列表的第一个元素
8 LPUSH key value1 [value2]
将一个或多个值插入到列表头部
9 LPUSHX key value
将一个值插入到已存在的列表头部
10 LRANGE key start stop
获取列表指定范围内的元素
11 LREM key count value
移除列表元素
12 LSET key index value
通过索引设置列表元素的值
13 LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
14 RPOP key
移除并获取列表最后一个元素
15 RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
16 RPUSH key value1 [value2]
在列表中添加一个或多个值
17 RPUSHX key value
为已存在的列表添加值
这些命令都是很常见的大家一定都要试试,明天见喽
文 Leslie
排版 Leslie
图均源自网络
喜欢请转发,嘿嘿嘿