Redis的五种数据类型

String类型

String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
1、set / get / append / strlen

127.0.0.1:6379> append k1 hello  该键不存在,因此append创建
(integer) 5
127.0.0.1:6379> append k1 word  该键已经存在,因此返回追加后value的长度值
(integer) 9
127.0.0.1:6379> get k1        get命令获取该键值   
"helloword"
127.0.0.1:6379> strlen k1      获取指定key的字符长度
(integer) 9
127.0.0.1:6379> exists k1      判断该键是否存在,存在返回1,否则返回0
(integer) 1
127.0.0.1:6379> set k1 "just do it"  #
OK
127.0.0.1:6379> get k1      通过set命令为键设置新值,并覆盖原有值 
"just do it"

2、incr / decr / incrby / decrby

127.0.0.1:6379> set n 100
OK
127.0.0.1:6379> incr n  #递增1
(integer) 101
127.0.0.1:6379> incr n
(integer) 102
127.0.0.1:6379> decr n  #递减1
(integer) 101
127.0.0.1:6379> incrby n 10  #递增10
(integer) 111
127.0.0.1:6379> decrby n 100  #递减100
(integer) 11

3、getset,setex,setnx
getset key value :覆盖,并显示旧值
setex key time value :为键值设置过期时间(秒)
ttl key :显示剩余有效时间
setnx:创建指定键,若该键存在则不执行,不存在则执行
例:getset key value :获取key值并返回,同时给key设新的值
getset返回值:①返回get的值分别执行 ② 返回的get 后 set变更的值(原子性 、一致性)

127.0.0.1:6379> getset k2 "hello"   
"11"
127.0.0.1:6379> get k2   #查看k2键,显示被覆盖
"hello"
127.0.0.1:6379> setex k2 100 "i miss u"
OK
127.0.0.1:6379> get k2
"i miss u"
127.0.0.1:6379> ttl k2  查看剩余时间
(integer) 82     现在的时间剩余82
127.0.0.1:6379> get k2  #时间到了之后
(nil)
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379> setnx k9 10 #无k9这个键时
(integer) 1
127.0.0.1:6379> get k9 
"10"
127.0.0.1:6379> setnx k9 100  #已经k9这个键时。setnx失败
(integer) 0
127.0.0.1:6379> get k9 
"10"

4、mset / mget / msetnx
例:mset key value [key value…] :批量设置键-值对
mget key [key…]: 批量获取键值对
MSETNX key value [key value …]:批量设置键-值对,都不存在就执行并返回1;只要有一个存在就不执行并返回0

127.0.0.1:6379> mset aa "hello" bb "world"  批量设置键的值
OK
127.0.0.1:6379> mget aa bb          批量获取键的值
1) "hello"
2) "world"
127.0.0.1:6379> msetnx cc 100 dd 200 
(integer) 1
127.0.0.1:6379> mget cc  dd 
1) "100"
2) "200"
127.0.0.1:6379> msetnx aa 200 mm 100  批量设置键值,若有存在的键则不执行
(integer) 0
List类型

概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
1、lpush/lpushx/lrange
LPUSH key value [value …]在头部(左侧)依次插入列表元素
LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回列表元素数量
LRANGE key start stop:|取从位置索引start到位置索引stop的所有元素(所以以o开始)

127.0.0.1:6379> lpush k1 a b c d e f g
(integer) 7
127.0.0.1:6379>  lrange k1 0 3      第一个元素到第四个元素
1) "g"
2) "f"
3) "e"
4) "d"
127.0.0.1:6379> lrange k1 2 4        第三个元素到第五个元素
1) "e"
2) "d"
3) "c"

2、lpop / llen

127.0.0.1:6379> lpop k1
"e"
127.0.0.1:6379> lpop k1
"g"
127.0.0.1:6379> lpop k1
"f"
127.0.0.1:6379> llen k1     上面弹出了三个元素,所以查看变成五个元素
(integer) 5

3、lrem / lset / lindex / ltrim
lrem key count value:从列表头部开始删除count个值为value的元素,并返回实际删除数量
lset key index value:将位置索引为index的元素设置新值value
lindex key index:获取索引为index的元素
ltrim key start stop:仅保留从位置索引start到索引stop的元素

127.0.0.1:6379> lpush k2 a b c d e f a b c
(integer) 9
127.0.0.1:6379> lrem k2 2 a     从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量
(integer) 2
127.0.0.1:6379> lrange k2 0 -1     看出删除后链中的全部元素
1) "c"
2) "b"
3) "f"
4) "e"
5) "d"
6) "c"
7) "b"
127.0.0.1:6379> lrem k2 3 b   
(integer) 2                 只查看到两个b元素 并删除
127.0.0.1:6379> lset k2 2 f    #将第三个元素设置为f
OK
127.0.0.1:6379> lindex k2 3  #获取索引为3的元素值
"b"
127.0.0.1:6379> ltrim k2 0 2      仅保留索引为0到索引为2的元素,相当于保留删除
OK
127.0.0.1:6379> lrange  k2 0 -1 
1) "b"
2) "d"
3) "f"

4、linsert
linsert : 在元素的前面(向左)或后面(向右)插入新元素

127.0.0.1:6379> lpush k2 a b c d e
(integer) 5
127.0.0.1:6379> linsert k2 before a a1      在a前面插入新元素a1
(integer) 6
127.0.0.1:6379> linsert k2 after e e2       在e后面插入新元素e2
(integer) 7
127.0.0.1:6379> lindex k2 1
"e2"
127.0.0.1:6379> linsert k2 after k a     在不存在的元素前或后插入,失败返回-1
(integer) -1

在这里插入图片描述
在这里插入图片描述
5、rpush / rpushx / rpop / rpoplpush
RPUSH key value [value …]在列表的尾部依次插入value
RPUSHX key value: key必须存在才可执行,将value从尾部插入,并返回所有元素数量RPOP key:在尾部弹出~(移除)一个元素,并返回该元素
RPOPLPUSH source destination:在keyl的尾部弹出一个元素并返回,将它插入key2的头部

127.0.0.1:6379> rpush k2 a b c d   右插入
(integer) 4
127.0.0.1:6379> rpushx k2 e   
(integer) 5
127.0.0.1:6379> lindex k2 4   查看索引值4的元素
"e"
........   分别插入到f
127.0.0.1:6379> rpop k2
"f"

在这里插入图片描述

Hash类型

概述: hash用于存储对象。可以采用这样的命名方式(hash格式) :对象类别和TD构成键名,使用字段表示对象的属性,而字段值则存储属性值。
如:存储ID为2的汽车对象。
如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
1、set / hget / hdel / hexists / hlen / hsetnx

127.0.0.1:6379> del k2                     删除原有的
(integer) 1
127.0.0.1:6379> hset k2 zhangsan a lisi b wangwu c
(integer) 3                                              添加内容元素
127.0.0.1:6379> hget k2 zhangsan
"a"                                                       获取和zhangsan 字段的值a
127.0.0.1:6379> hget k2 lisi
"b"
127.0.0.1:6379> hexists k2 wangwu     判断wangwu存在  返回值1
(integer) 1         
127.0.0.1:6379> hexists k2 liuyang    
(integer) 0
127.0.0.1:6379> hlen k2    
(integer) 3
127.0.0.1:6379> hsetnx k2 lisi 4   
(integer) 0
127.0.0.1:6379> hget k2 wangwu
"c"

2、hincrby

127.0.0.1:6379> hset k2 lisi1 110      #追加的方式
(integer) 1
127.0.0.1:6379> hget k2 lisi1 
"100"
127.0.0.1:6379> hget k2  zhangsan1
"a"
127.0.0.1:6379> hincrby k2 lisi 2 6 
(integer) 105
127.0.0.1:6379> hincrby k2 lisi 2 - 8
(integer) 95
127.0.0.1:6379> hget k2 lisi1 
"95"

3、hmset / hmget / hgetall / hkeys / hvals

127.0.0.1:6379> hgetall k2      hgetall  命令返回myhash 键的又有字段及其值,从结果中可以看出,他们是逐对列出的
1) "zhangsan"
2) "a"
3) "lisi"
4) "b"
5) "wangwu"
6) "c"
127.0.0.1:6379> hgetall k2
1) "zhangsan"
2) "a"
3) "lisi"
4) "b"
5) "wangwu"
6) "c"
127.0.0.1:6379> hget k2 zhaogo
(nil)
127.0.0.1:6379> hget k2 lisi
"b"
127.0.0.1:6379> hkeys k2        hkeys命令仅获取myhash键中所有字段的名字
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379> hvals k2         hvals 命令仅获取myhash键中所有字段的值
Set类型(无序集合)

概述:无序集合,元素类型为String类型,元素具有唯一性,不允许存在重复的成员。多个集合类型之间可以进行并集、交集和差集运算。

应用范围:
①可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。
②充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections命令就可以充分发挥它的方便和效率的优势了
1、sadd / smembers / scard / sismember

sadd				将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合
smembers	   通过smembers命令查看插入的结果,输出的顺序与插入顺序无关
scard			    获取集合中成员的数量
sismember		判断键中xxx成员是否存在,返回0表示不存在,1表示存在
127.0.0.1:6379> sadd k1 a b c d e 
(integer) 5
127.0.0.1:6379> smembers k1 
1) "b"
2) "a"
3) "d"
4) "c"
5) "e"
127.0.0.1:6379> scard k1 
(integer) 5
127.0.0.1:6379> sismember k1 c 
(integer) 1
127.0.0.1:6379> sismember k1 f 
(integer) 0

2、spop / srem / srandmember / smove

127.0.0.1:6379> sadd k1 a b c d e 
(integer) 5
127.0.0.1:6379> spop k1 
"d"
127.0.0.1:6379> smembers k1
1) "c"
2) "b"
3) "a"
4) "e"
127.0.0.1:6379> srem k1 a  b c 
(integer) 3
127.0.0.1:6379> smembers k1 
1) "e"
127.0.0.1:6379> del k2 
(integer) 1
127.0.0.1:6379> smove k1 k2  d        k1中没有d所以失败
(integer) 0
127.0.0.1:6379> smove k1 k2  e 
(integer) 1
127.0.0.1:6379> keys k2
1) "k2"
127.0.0.1:6379> smembers k2    分别查看myset和myset2的成员,确认移动是否真的成功
1) "e"
Sorted Set类型(zset、有序集合)

有序集合,元素类型为String,元素具有唯一性,不能重复。
每个元素都会关联一个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同
应用范围:
可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行zADD命
令更新玩家的分数,此后再通过ZRANGE命令获取积分"OP10的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
1、zadd / zcard / zcount / zrem / zincrby / zscore / zrank

127.0.0.1:6379> del k2 
(integer) 1
127.0.0.1:6379> zadd k2 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> zrange k2 0 -1 withscores      0表示第一个成员  -1表示最后一个成员;withscores选项表示返回的结果中包含每个成员及其分数,否则只返回成员
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
127.0.0.1:6379> zcard k2
(integer) 3
127.0.0.1:6379> zcount k2 1 2
(integer) 2
127.0.0.1:6379> zrem k2 a b
(integer) 2
127.0.0.1:6379> zincrby k2 2 a
"2"
127.0.0.1:6379> zrange k2 0 -1 withscores
1) "a"
2) "2"
3) "c"
4) "3"
127.0.0.1:6379> zrank k2 c
(integer) 1
127.0.0.1:6379> zrank k2 d
(nil)
127.0.0.1:6379> zrank k2 a
(integer) 0

2、zrangebyscore / zremrangebyrank / zremrrangebyscore

127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrangebyscore k1 2 4
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> zrangebyscore k1 -inf +inf limit 2 2 
1) "c"
2) "d"
127.0.0.1:6379> zremrangebyrank k1 1 3
(integer) 3
127.0.0.1:6379> zrange k1 0 -1 
1) "a"
2) "e"
127.0.0.1:6379> zremrangebyscore k1 1 2
(integer) 1
127.0.0.1:6379> zrange k1 0 -1 
1) "e"

3、zrevrange / zrevrangebyscore / zrevrank
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值