redis学习(六)

redis学习(六)

list(列表)

所有的list命令都是用l开头的,Redis不区分大小命令。把list当成 ,栈、队列、阻塞队列!

127.0.0.1:6666> lpush list one # 新建list并从左插入,先进先出。可以同时多个值。
(integer) 1
127.0.0.1:6666> lpush list two
(integer) 2
127.0.0.1:6666> lpush list 3
(integer) 3
127.0.0.1:6666> lrange list 0 -1 # 获取list中的所有值。
1) "3"
2) "two"
3) "one"
127.0.0.1:6666> lrange list 0 1
1) "3"
2) "two"
127.0.0.1:6666> rpush list 5 # 从右插入,进来的在最后面,如同一个链表。
(integer) 4
127.0.0.1:6666> lrange list 0 -1
1) "3"
2) "two"
3) "one"
4) "5"
# 移除,lpop,rpop。
127.0.0.1:6666> lrange list 0 -1
1) "3"
2) "two"
3) "one"
4) "5"
127.0.0.1:6666> lpop list #从左移除第一个。
"3"
127.0.0.1:6666> rpop list # 从右移除第一个。
"5"
127.0.0.1:6666> lrange list 0 -1
1) "two"
2) "one"
# lindex
127.0.0.1:6666> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6666> lindex list 0 # 通过下标获取值
"two"
127.0.0.1:6666> lindex list 1
"one"
127.0.0.1:6666> 
# llen
127.0.0.1:6666> llen list # 获取list长度
(integer) 2
# lrem 移除指定的值。上面lpop,rpop。只能移除最后的。
127.0.0.1:6666> lpush list 111
(integer) 3
127.0.0.1:6666> lpush list 222
(integer) 4
127.0.0.1:6666> lpush list 333
(integer) 5
127.0.0.1:6666> lrange list 0 -1
1) "333"
2) "222"
3) "111"
4) "two"
5) "one"
127.0.0.1:6666> lrem list 1 one # 移除一个one
(integer) 1
127.0.0.1:6666> lrange list 0 -1
1) "333"
2) "222"
3) "111"
4) "two"
127.0.0.1:6666> lpush list 333
(integer) 5
127.0.0.1:6666> lrem list 1 two
(integer) 1
127.0.0.1:6666> lrange list 0 -1
1) "333"
2) "333"
3) "222"
4) "111"
127.0.0.1:6666> lrem list 2 333 # 移除两个333
(integer) 2
127.0.0.1:6666> lrange list 0 -1
1) "222"
2) "111"
127.0.0.1:6666> lrem list 9 000 # 移除不存在的值,返回0,移除9个000
(integer) 0
# trim修剪,list截断。
127.0.0.1:6666> rpush list "hello"
(integer) 1
127.0.0.1:6666> rpush list "hello1"
(integer) 2
127.0.0.1:6666> rpush list "hello2"
(integer) 3
127.0.0.1:6666> rpush list "hello3"
(integer) 4
127.0.0.1:6666> ltrim list 1 2 # 通过下标截取。
OK
127.0.0.1:6666> lrange list 0 -1 # 查看全部
1) "hello1"
2) "hello2"
# rpoplpush 移除列表最后一个元素,并将其加入新的列表中。
127.0.0.1:6666> lrange list 0 -1 
1) "hello1"
2) "hello2"
3) "hello3"
127.0.0.1:6666> rpop list
"hello3"
127.0.0.1:6666> rpoplpush list mylist # 移除当前列表最后一个元素,将它加入新的列表中。
"hello2"
127.0.0.1:6666> lrange list 0 -1
1) "hello1"
127.0.0.1:6666> lrange mylist 0 -1 # 查看新的列表
1) "hello2"
# lset 将列表中指定下标替换成另一个值,更新操作。
127.0.0.1:6666> exists list # 判断key是否存在
(integer) 0
127.0.0.1:6666> lset list 0 item # 如果不存在,替换将会报错
(error) ERR no such key
127.0.0.1:6666> lpush list value1
(integer) 1
127.0.0.1:6666> lrange list 0 0
1) "value1"
127.0.0.1:6666> lset list 0 item # 更新成功。
OK
127.0.0.1:6666> lrange list 0 0
1) "item"
127.0.0.1:6666> lset list 1 other
(error) ERR index out of range
# linsert 将某个具体的value插入到列中某个元素的前面(before)或者后面(after)。
127.0.0.1:6666> rpush list "heloo"
(integer) 1
127.0.0.1:6666> rpush list "world"
(integer) 2
127.0.0.1:6666> linsert list before "world" "other" #在world前面增加
(integer) 3
127.0.0.1:6666> lrange list 0 -1
1) "heloo"
2) "other"
3) "world"
127.0.0.1:6666> linsert list after "world" "new" #在后面 
(integer) 4
127.0.0.1:6666> lrange list 0 -1
1) "heloo"
2) "other"
3) "world"
4) "new"

小结

  • 他实际上是一个链表,before Node after , left,right 都可以插入值

  • 如果key 不存在,创建新的链表

  • 如果key存在,新增内容

  • 如果移除了所有值,空链表,也代表不存在!

  • 在两边插入或者改动值,效率最高! 中间元素,相对来说效率会低一点~

    消息排队!消息队列(Lpush Rpop),栈( Lpush Lpop)!

set(集合)

set中的值,是不可重复的,数据是无序的。

127.0.0.1:6666> sadd set "hello"
(integer) 1
127.0.0.1:6666> sadd set "redis"
(integer) 1
127.0.0.1:6666> sadd set "cuixiaoyan" # 添加元素到set中。
(integer) 1
127.0.0.1:6666> smembers set # 查看set中所有值。
1) "cuixiaoyan"
2) "hello"
3) "redis"
127.0.0.1:6666> sismember set hello # 判断set中是否有某个值
(integer) 1
127.0.0.1:6666> sismember set he
(integer) 0
127.0.0.1:6666> scard set # 获取set里值的数量
(integer) 3
# 删除 srem
127.0.0.1:6666> srem set "hello" # 删除
(integer) 1
127.0.0.1:6666> scard set 
(integer) 2
127.0.0.1:6666> smembers set
1) "cuixiaoyan"
2) "redis"
# set不重复集合,抽随机(抽奖等等)。
127.0.0.1:6666> smembers set
1) "woshi"
2) "cuixiaoyan"
3) "nihao"
4) "redis"
127.0.0.1:6666> srandmember set # 抽取一个
"woshi"
127.0.0.1:6666> srandmember set
"redis"
127.0.0.1:6666> srandmember set 2 # 抽取两个
1) "nihao"
2) "redis"
# 删除指定的key,随机删除key。
127.0.0.1:6666> spop set # 删除
"redis"
127.0.0.1:6666> smembers set
1) "woshi"
2) "cuixiaoyan"
3) "nihao"
# 将指定的值,移动到另一个set中。
127.0.0.1:6666> sadd set "ada" "asdad" # 添加多个值
(integer) 2
127.0.0.1:6666> smembers set # 查看所有值
1) "ada"
2) "woshi"
3) "cuixiaoyan"
4) "nihao"
5) "asdad"
127.0.0.1:6666> smove set myset "woshi" # 移动某个值
(integer) 1
127.0.0.1:6666> smembers set
1) "nihao"
2) "ada"
3) "cuixiaoyan"
4) "asdad"
127.0.0.1:6666> smembers myset
1) "woshi"
# 数字类集合
127.0.0.1:6666> sadd set1 a b c d e f 
(integer) 6
127.0.0.1:6666> sadd set2 q w e r t y
(integer) 6
127.0.0.1:6666> sdiff set1 set2 # 差集
1) "a"
2) "f"
3) "c"
4) "b"
5) "d"
127.0.0.1:6666> sinter set1 set2 # 交集
1) "e"
127.0.0.1:6666> sunion set1 set2 # 并集
 1) "y"
 2) "e"
 3) "d"
 4) "b"
 5) "a"
 6) "f"
 7) "w"
 8) "t"
 9) "q"
10) "c"
11) "r"

微博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!

共同关注,共同爱好,二度好友,推荐好友!(六度分割理论)