前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis学习(六)

redis学习(六)

作者头像
崔笑颜
发布2020-09-01 09:44:09
4680
发布2020-09-01 09:44:09
举报
文章被收录于专栏:小小码农一个。

list(列表)

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

代码语言:javascript
复制
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中的值,是不可重复的,数据是无序的。

代码语言:javascript
复制
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集合中!将它的粉丝也放在一个集合中!

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • list(列表)
  • set(集合)
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档