Redis五大基本类型

String(字符串)

####################################################
127.0.0.1:6379>set key1 v1 #设置值
OK
127.0.0.1:6379>get key1 #获得值
"v1"
127.0.0.1:6379>keys * #获得所有的key
1)"key1"
127.0.0.1:6379>EXISTS key1 #判断某一个key是否存在
(integer) 1
127.0.0.1:6379>APPEND key1 "hello" #追加字符串,如果当前key不存在,就相当于setkey
(integer) 7
127.0.0.1:6379>get key1
"v1hello"
127.0.0.1:6379>STRLEN key1 #获取字符串长度
(integer) 7
127.0.0.1:6379>APPEND key1 #",kuangshen"
(integer) 17
127.0.0.1:6379>STRLEN key1 #设置值
(intefer) 17
127.0.0.1:6379>get key1 #设置值
"v1hello,kuangshen"
#########################################################
#这里的key是一个巧妙的设计:user:{id}:{field}
127.0.0.1:6379>mset user:1:name zhangsan user1:age:2
127.0.0.1:6379>mget user:1:name user:1:age

List(列表)

基本的数据类型,列表

在Redis里面,我们可以把list玩成,栈,队列、阻塞队列!

所有的list命令都是用l开头的

127.0.0.1:6379> keys *
127.0.0.1:6379> LPUSH list one #将一个值插入或者多个值,插入到列表头部(左)
127.0.0.1:6379> LRANGE list 0 -1 #获取全部数据
127.0.0.1:6379> LRANGE list 0 1 #获取0-1的数据
127.0.0.1:6379> Rpush list righr #插入到尾部
127.0.0.1:6379> LRANGE list 0 1
127.0.0.1:6379> LRANGE list 0 -1
#Lpop Rpop
127.0.0.1:6379>Lpop list #移除当前队列的第一个值
127.0.0.1:6379>Rpop list #移除list的最后一个元素
#Lindex
127.0.0.1:6379>lindex list 1 #通过下标获得list中的某一个值!
#Llen
127.0.0.1:6379>Llen list #返回列表的长度
#Lrem
127.0.0.1:6379>lrem list 1 one #移除指定的个数的值
127.0.0.1:6379>lrem list 2 three
#trim 修剪:list 截断!
127.0.0.1:6379>ltrim mylist 1 2 #只截取1,2号元素,这个list已经被改变了,截断了只剩下截取的元素!
#rpoplpush 移除列表的最后一个元素,
127.0.0.1:6379>rpoplpush mylist myotherlist
127.0.0.1:6379>lrange mylist 0 -1
127.0.0.1:6379>lrange myotherlist 0 -1 #查看目标列表中,确实存在改值!
#lset 将列表中指定下标的值替换为另外一个值,更新操作
127.0.0.1:6379>EXISTS list #判断这个列表是否存在
127.0.0.1:6379>lset list 0 item
127.0.0.1:6379>lpush list value1
127.0.0.1:6379>LRANGE list 0 0
127.0.0.1:6379>lset list 0 item #如果存在,更新当前下标的值
127.0.0.1:6379>lset list 1 other #如果不存在,则会报错!
# linsert 将某个具体的value插入到列把你中某个元素的前面或者后面
127.0.0.1:6379>Rpush mylist "hello"
127.0.0.1:6379>Rpush mylist "world"
127.0.0.1:6379>LINSERT mylist before "world" "other"
127.0.0.1:6379>LRANGE mylist 0 -1

小结

  • 他实际上是一个链表,before Node after ,left,right 都可以插入值
  • 如果key不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果移除了所有的值,空链表,也代表不存在!
  • 在两边插入或者改动值,效率最高!中间元素,效率偏低。

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

Set(集合)

set中的值是不能重读的!

127.0.0.1:6379>sadd myset "hello" #set集合中添加元素
127.0.0.1:6379>SMEMBERS myset #查看指定set的所有值
127.0.0.1:6379>SISMEMBER myset hello #判断某一个值是不是在set集合中
127.0.0.1:6379>SISMEMBER myset world
127.0.0.1:6379>scard myset #获取set集合中的内容元素个数!
127.0.0.1:6379>srem myset hello #移除set集合中的指定元素
127.0.0.1:6379>scard myset
127.0.0.1:6379>SMEMBERS myset
#set 无序不重复集合。抽随机!
127.0.0.1:6379>SRANDMEMBER myset #随机抽取出一个元素
#删除指定的key,随机删除key!
127.0.0.1:6379>SMEMBERS myset
127.0.0.1:6379>spop myset #随机移除元素
#将一个指定的值,移动到另外一个set集合
127.0.0.1:6379>smove myset myset2 "ct" #移动指定的元素
#微博,b站,共同关注!(交集)
127.0.0.1:6379>SDIFF key1 key2 #差集,两个集合不同的元素
127.0.0.1:6379>SINTER key1 key2 #交集,共同好友
127.0.0.1:6379>SUNION key1 key2 #并集,

Hash(哈希)

Map集合,key-Map(key-value)集合! 这个值是一个map集合! 本质和String类型没有太大区别,还是一个简单的key-value

Set myhash field ct

127.0.0.1:6379> hset myhash field1 ct #set一个具体的 key-value
127.0.0.1:6379> hget myhash field1 #获取一个字段值
127.0.0.1:6379> hmset myhash field1 hello field2 world #(hmset已经弃用,用hset) #set多个key-value
127.0.0.1:6379> hmget myhash field1 field2 #获取多个字段值
127.0.0.1:6379> hgetall myhash #获取全部的数据
127.0.0.1:6379> hdel myhash field1 #删除hash指定key字段!对应value值也消失了
127.0.0.1:6379> hgetall myhash
# hlen myhash 获取hash表的字段数量
127.0.0.1:6379> hlen myhash
# hexists myhash field1 判断hash中的指定字段是否存在
127.0.0.1:6379> hexists myhash field1
# 只获得所有的field
# 只获得所有的key
127.0.0.1:6379> hkeys myhash #只获得所有的field
#incr decr (失效)
127.0.0.1:6379>hset myhash field3 5 #指定增量
127.0.0.1:6379>hsetnx myhash field4 hello #如果不存在则可以设置
127.0.0.1:6379>hsetnx myhash field4 world #如果存在则不能设置
127.0.0.1:6379>hset user:1:name ct
127.0.0.1:6379>hget user:1:name

hash变更的数据user name age,尤其是用户信息之类的,经常变动的信息!hash更适合于对象的存储,String更适合于字符串

Zset(有序集合)

在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1

127.0.0.1:6379>zadd myset 1 one #添加一个值
127.0.0.1:6379>zadd myset 2 two 3 three #添加多个值
127.0.0.1:6379>ZRANGE myset 0 -1
#排序如何实现
127.0.0.1:6379>zadd salary 2500 xiaohong
127.0.0.1:6379>zadd salary 5000 zhangsan
127.0.0.1:6379>zadd salary 500 ct
127.0.0.1:6379>ZRANGEBYSCORE salary -inf +inf
127.0.0.1:6379>ZRANGEBYSCORE salary -1 0
127.0.0.1:6379>ZRANGEBYSCORE salary -inf +inf withscores
127.0.0.1:6379>ZRANGEBYSCORE salary -inf 2500 withscores #最大到2500
127.0.0.1:6379>ZRANGEBYSCORE salary -inf +inf withscores #升序
127.0.0.1:6379>ZREVRANGEBYSCORE salary +inf -inf withscores #降序
#移除rem中的元素
127.0.0.1:6379>zrem salary xiaohong #删除指定元素
127.0.0.1:6379>zrange salary 0 -1
127.0.0.1:6379>zcard salary #获取有序集合中的个数
#############
127.0.0.1:6379>zadd myset 1 hello
127.0.0.1:6379>zadd myset 2 world 3 kuangshen
127.0.0.1:6379>zcount myset 1 2 #获取指定区间的成员数量

posted @ 2021-11-10 10:01  落笔生花  阅读(74)  评论(0)    收藏  举报