网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
在Redis里面,可以用List玩成:栈,队列,阻塞队列
redis不区分大小写命令
添加:
LPUSH
RPUSH
127.0.0.1:6379> LPUSH list one #将一个值或多个值,插入到链表的头部(左)
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 #获取list全部的值
-
“three”
-
“two”
-
“one”
127.0.0.1:6379> RPUSH list right
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1 #将一个值或多个值,插入到链表的尾部(右)
-
“three”
-
“two”
-
“one”
-
“right”
127.0.0.1:6379>
移除:
LPOP
RPOP
127.0.0.1:6379> LRANGE list 0 -1
-
“three”
-
“two”
-
“one”
-
“right”
127.0.0.1:6379> LPOP list #移除list的第一个元素
“three”
127.0.0.1:6379> LRANGE list 0 -1
-
“two”
-
“one”
-
“right”
127.0.0.1:6379> RPOP list #移除list的最后一个元素
“right”
127.0.0.1:6379> LRANGE list 0 -1
-
“two”
-
“one”
移除指定的值:
Lrem key count value #移除指定的值
count>0从前往后移除,=0移除全部,<从后往前
127.0.0.1:6379> LRANGE list 0 -1
-
“three”
-
“three”
-
“two”
-
“ont”
127.0.0.1:6379> LREM list 1 ont #移除list中一个ont
(integer) 1
127.0.0.1:6379> LREM list 2 three #移除list中两个three
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1 #查看list全部元素
- “two”
根据下标获取值:
Lindex #通过下标获取某一个值
127.0.0.1:6379> LRANGE list 0 -1
-
“two”
-
“one”
127.0.0.1:6379> LINDEX list 0
“two”
获取list长度:
Llen #获取list长度
127.0.0.1:6379> lpush list ont
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
-
“three”
-
“two”
-
“ont”
127.0.0.1:6379> LLEN list #获取list长度
(integer) 3
裁剪操作:
ltrim #裁剪,会修改原来的list
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> RPUSH mylist hello
(integer) 1
127.0.0.1:6379> RPUSH mylist hello1 hello2 hello3
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
-
“hello”
-
“hello1”
-
“hello2”
-
“hello3”
127.0.0.1:6379> ltrim mylist 1 2
OK
127.0.0.1:6379> LRANGE mylist 0 -1
-
“hello1”
-
“hello2”
组合命令:
rpoplpush #移除列表的最后一个元素,并移动新的列表中
127.0.0.1:6379> rpush mylist hello0 hello1 hello2 hello3 hello4
(integer) 5
127.0.0.1:6379> RPOPLPUSH mylist deslist #移除最后的元素,并最后一个元素添加到deslist中
“hello4”
127.0.0.1:6379> LRANGE mylist 0 -1 #查看mylist列表
-
“hello0”
-
“hello1”
-
“hello2”
-
“hello3”
127.0.0.1:6379> LRANGE deslist 0 -1 #查看目标列表,确实有mylist删除的值
- “hello4”
替换命令:
LSET #前提要求列表存在,设置列表下标的值
127.0.0.1:6379> EXISTS list #判断list是否存在
(integer) 0
127.0.0.1:6379> LSET list 0 hello0 #前提要求列表存在
(error) ERR no such key
127.0.0.1:6379> LPUSH list hello #给list添加值
(integer) 1
127.0.0.1:6379> LSET list 0 hello0 #设置list下标0的值为hello0
OK
127.0.0.1:6379> LRANGE list 0 -1 #查看list所有元素
- “hello0”
插入命令:
linsert 列表 before|after 元素 插入的值 #指定列表前后插入值
127.0.0.1:6379> rpush mylist hello0 hello1 hello2 hello3
(integer) 4
127.0.0.1:6379> LINSERT mylist before hello1 hello0.5 #hello1前插入hello0.5
(integer) 5
127.0.0.1:6379> LRANGE mylist 0 -1 #查看列表
-
“hello0”
-
“hello0.5”
-
“hello1”
-
“hello2”
-
“hello3”
127.0.0.1:6379> LINSERT mylist after hello1 hello1.5 #hello1后插入hello1.5
(integer) 6
127.0.0.1:6379> LRANGE mylist 0 -1 #查看列表
-
“hello0”
-
“hello0.5”
-
“hello1”
-
“hello1.5”
-
“hello2”
-
“hello3”
小结:
-
list实际上是一个链表,(before) Node (after),left,right都可以插入值
-
如果key不存在,创建新的链表
-
如果key存在,新增内容
-
如果移除了key,所有的value就消失了(空链表)
-
在两遍插入后者改动值效率最高,如果是中间元素,效率偏低
消息排队,消息队列
-
Lpush Rpop 队列
-
Lpush Lpop 栈
.
set中的值是不能重复的
SISMEMBER #set集合中是否包含指定的元素
SMEMBERS #查看set集合所有的元素
sadd #set集合添加元素
scard #获取set集合中元素个数
127.0.0.1:6379> sadd myset hello #set集合中添加元素
(integer) 1
127.0.0.1:6379> sadd myset hello #set集合中不能添加重复的元素
(integer) 0
127.0.0.1:6379> sadd myset achang
(integer) 1
127.0.0.1:6379> sadd myset loveachang
(integer) 1
127.0.0.1:6379> SMEMBERS myset #查看指定set集合中的所有元素
-
“loveachang”
-
“achang”
-
“hello”
127.0.0.1:6379> SISMEMBER myset achang #查找set集合中是否包含指定的值
(integer) 1
127.0.0.1:6379> SCARD myset #查看set集合中的元素个数
(integer) 3
移除元素:
srem #移除set集合元素
127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> SMEMBERS myset
-
“loveachang”
-
“achang”
随机筛选元素:
SRANDMEMBER #随机筛选set集合中的元素
127.0.0.1:6379> SMEMBERS myset #获取myset中的所有元素
-
“loveachang”
-
“achang”
127.0.0.1:6379> SRANDMEMBER myset #随机筛选出myset中的元素
“loveachang”
随机删除元素:
spop #随机弹出一个元素
127.0.0.1:6379> SMEMBERS myset
-
“loveachang”
-
“achang”
127.0.0.1:6379> spop myset #随机弹出一个元素
“loveachang”
127.0.0.1:6379> SMEMBERS myset
- “achang”
127.0.0.1:6379>
移动元素:
smove 源set 目标set 移动元素 #移动元素
127.0.0.1:6379> sadd myset hello world achang
(integer) 3
127.0.0.1:6379> sadd myset2 set2
(integer) 1
127.0.0.1:6379> smove myset myset2 achang #将myset中的achang元素移动到myset2中
(integer) 1
127.0.0.1:6379> SMEMBERS myset
-
“world”
-
“hello”
127.0.0.1:6379> SMEMBERS myset2
-
“achang”
-
“set2”
集合之间的交、并、差集:
SDIFF #前面的集合(以前面为主)与后面集合的差集
SINTER #两个集合的交集
SUNION #两个集合的并集
127.0.0.1:6379> sadd key1 a b c
(integer) 3
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d e
(integer) 2
127.0.0.1:6379> SDIFF key1 key2 #key1与key2的差集
-
“b”
-
“a”
127.0.0.1:6379> SINTER key1 key2 #key1与key2的交集
- “c”
127.0.0.1:6379> SUNION key1 key2 #key1与key2的并集
-
“b”
-
“c”
-
“e”
-
“a”
-
“d”
微博,A用户将所有关注的人放在一个set集合中,将它的粉丝也放在一个集合中
共同关注,共同爱好,二度好友、推荐好友(六度分割理论)
.
Map集合,key-map,这个value值是一个map集合
hset #设置集合
HGET #获取集合
hmset #批量设置集合
hmget #批量获取集合
hgetall #获取集合所有内容
127.0.0.1:6379> hset myhash field1 achang #设置集合
(integer) 1
127.0.0.1:6379> HGET myhash field1 #获取集合
“achang”
127.0.0.1:6379> hmset myhash field1 hello1 field2 hello2 #批量设置集合
OK
127.0.0.1:6379> hmget myhash field1 field2 #批量获取集合
-
“hello1”
-
“hello2”
127.0.0.1:6379> hgetall myhash #获取集合所有内容
-
“field1”
-
“hello1”
-
“field2”
hdel #删除指定hash的key,删除后,其对应的value值也就消失了
hlen #获取指定hash中的字段数量
HEXISTS #判断hash中指定字段是否存在
127.0.0.1:6379> hdel myhash field1 #删除hash指定的key
(integer) 1
127.0.0.1:6379> hgetall myhash
-
“field2”
-
“hello2”
127.0.0.1:6379> hmset myhash field1 value1 field2 value2 field3 value3
OK
127.0.0.1:6379> hgetall myhash
-
“field2”
-
“value2”
-
“field1”
-
“value1”
-
“field3”
-
“value3”
127.0.0.1:6379> hlen myhash #获取hash的字段数量
(integer) 3
127.0.0.1:6379> HEXISTS myhash field1 #判断hash中指定字段是否存在
(integer) 1
127.0.0.1:6379> HEXISTS myhash field5 #判断hash中指定字段是否存在
(integer) 0
hkeys #获取hash的所有key值
hvals #获取hash的所有values值
127.0.0.1:6379> hkeys myhash
-
“field2”
-
“field1”
-
“field3”
127.0.0.1:6379> hvals myhash
-
“value2”
-
“value1”
-
“value3”
HINCRBY #
HSETNX #
127.0.0.1:6379> hset myhash field5 5
(integer) 1
127.0.0.1:6379> HINCRBY myhash field5 5 #指定增量
(integer) 10
127.0.0.1:6379> HINCRBY myhash field5 -5 #指定增量
(integer) 5
127.0.0.1:6379> HSETNX myhash field4 world #如果不存在,创建成功
(integer) 1
127.0.0.1:6379> HSETNX myhash field4 apple #如果存在,创建失败
(integer) 0
变更数据,user的name、age;可用于用户信息的保存,经常变动的信息
hash更适合对象保存;String更适合字符串存储;
.
在set的基础上,增加了一个值set k1 v1;zset k1 score v1
myzset #添加值
ZRANGE #获取值
ZREVRANGE
127.0.0.1:6379> zadd myzset 1 one #添加一个值
(integer) 1
127.0.0.1:6379> zadd myzset 2 two 3 three #添加多个值
(integer) 3
127.0.0.1:6379> ZRANGE myzset 0 -1
-
“one”
-
“two”
-
“three”
ZRANGEBYSCORE key 范围小 范围打 withscores #排序显示范围内的
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf #显示所有用户,从小到大
-
“achang”
-
“xiaohong”
-
“zhangsan”
-
“xiaoliu”
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores#显示所有用户,从小到大,并带score
-
“achang”
-
“200”
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
在set的基础上,增加了一个值set k1 v1;zset k1 score v1
myzset #添加值
ZRANGE #获取值
ZREVRANGE
127.0.0.1:6379> zadd myzset 1 one #添加一个值
(integer) 1
127.0.0.1:6379> zadd myzset 2 two 3 three #添加多个值
(integer) 3
127.0.0.1:6379> ZRANGE myzset 0 -1
-
“one”
-
“two”
-
“three”
ZRANGEBYSCORE key 范围小 范围打 withscores #排序显示范围内的
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf #显示所有用户,从小到大
-
“achang”
-
“xiaohong”
-
“zhangsan”
-
“xiaoliu”
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores#显示所有用户,从小到大,并带score
-
“achang”
-
“200”
[外链图片转存中…(img-LfhN5vwv-1715572536807)]
[外链图片转存中…(img-BuTK3WKr-1715572536807)]
[外链图片转存中…(img-I8WVulcA-1715572536807)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新