既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- “v3”
127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3 k4 v4 #如果不存在,原子性操作
(integer) 0
#对象
set user:1{name:achang,age:3} #设置一个user:1 对象 值为json保存一个对象
#这里key是一个巧妙的设计:user:{id}:{filed},如此设计在Redis中完全ok
127.0.0.1:6379> mset user:1:name achang user:1:age 13
OK
127.0.0.1:6379> mget user:1:name user:1:age
-
“achang”
-
“13”
getset #先get再set
127.0.0.1:6379> getset room redis #先获取再设置,如果不存在,返回nil,并设置
(nil)
127.0.0.1:6379> get room
“redis”
127.0.0.1:6379> getset room mongoDB #如果存在,返回key的值
“redis”
127.0.0.1:6379> get room
“mongoDB”
127.0.0.1:6379>
String类似的使用场景:value除了字符串还可以是数字
-
计数器
-
统计多单位数量 uid:1001:follow 0 incr
-
粉丝数
-
对象缓存存储
.
基本数据类型,列表
在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 #指定增量
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
) “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 #指定增量
[外链图片转存中…(img-KWIA2C4J-1715764474740)]
[外链图片转存中…(img-uz00xrQ3-1715764474740)]
[外链图片转存中…(img-TDamNMTy-1715764474740)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新