Redis五大数据类型

Redis指令详解

基础指令:

  • exists key:判断键是否存在

  • del key:删除键值对

  • move key db:将键值对移动到指定数据库

  • expire key second:设置键值对的过期时间

  • type key:查看value的数据类型

  • flushdb:清空数据

  • clear:清空界面

关于TTL命令

Redis的key,通过TTL命令返回key的过期时间,一般来说有3种:

当前key没有设置过期时间,所以会返回-1.
当前key有设置过期时间,而且key已经过期,所以会返回-2.
当前key有设置过期时间,且key还没有过期,故会返回key的正常剩余时间.
关于重命名RENAME和RENAMENX

RENAME key newkey修改 key 的名称
RENAMENX key newkey仅当 newkey 不存在时,将 key 改名为 newkey 。

各种数据类型

string数据类型

127.0.0.1:6379> set key1 chaoren   #给key1设置值
OK
127.0.0.1:6379> get key1			#获取key1值
"chaoren"
127.0.0.1:6379> append key1 saiwen		#给key1追加值
(integer) 13
127.0.0.1:6379> strlen key1				#获取key1长度
(integer) 13
127.0.0.1:6379> get key1			
"chaorensaiwen"
======================================================
127.0.0.1:6379> set view 0     #设置值
OK
127.0.0.1:6379> incr view		#递增 相当于i++
(integer) 1
127.0.0.1:6379> get view		#得到值
"1"
127.0.0.1:6379> incr view		#递增
(integer) 2
127.0.0.1:6379> incr view		#递增
(integer) 3
127.0.0.1:6379> incr view		#递增
(integer) 4
127.0.0.1:6379> incr view		#递增
(integer) 5
127.0.0.1:6379> get view		#得到值
"5"
127.0.0.1:6379> decr view		#递减 相当于i--
(integer) 4
127.0.0.1:6379> get view		
"4"	
127.0.0.1:6379> incrby view 10	#从当前位置增加10	
(integer) 14
127.0.0.1:6379> get view		#得到值
"14"
=====================================================
127.0.0.1:6379> set key1 hello,word #设置值
OK
127.0.0.1:6379> get key1
"hello,word"
127.0.0.1:6379> getrange key1 0 3	#截取值
"hell"
127.0.0.1:6379> getrange key1 0 -1	#截取全部
"hello,word"
127.0.0.1:6379> set key1 hello,word
OK
127.0.0.1:6379> get key1
"hello,word"
127.0.0.1:6379> setrange key1 6 world  #从第几个位置替换
(integer) 11
127.0.0.1:6379> get key1
"hello,world"
=======================================================
127.0.0.1:6379> setex key2 20 iloveu #set with expire 设置时间
OK
127.0.0.1:6379> setnx key2 xixi	#如果已经存在则执行失败,不会替换值 set if not exist
(integer) 0
127.0.0.1:6379> get key2
"iloveu"
127.0.0.1:6379> get key2
(nil)
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> setnx key2 xixi  #如果不存在创建
(integer) 1
127.0.0.1:6379> get key2
"xixi"
====================================================
##多值操作
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3   #设置多个值
OK
127.0.0.1:6379> keys *  
1) "k2"
2) "k3"
3) "k1"
127.0.0.1:6379> msetnx k1 v1 k4 v4   #如果存在则执行失败,原子性操作
(integer) 0
127.0.0.1:6379> mget k1 k2 k3   #得到多个值
1) "v1"
2) "v2"
3) "v3"
==================================================
##先gethouset
127.0.0.1:6379> getset key1 chaoren  #先get后set 若没有则创建
(nil)
127.0.0.1:6379> get key1
"chaoren"
127.0.0.1:6379> getset key1 saiwen		
"chaoren"
127.0.0.1:6379> get key1
"saiwen"
===================================================
##设置对象操作
127.0.0.1:6379> set chaoren:1 {name:saiwen,age:10000} #设置一个对象以json的形式保存
OK
127.0.0.1:6379> get chaoren:1  #得到值
"{name:saiwen,age:10000}"
127.0.0.1:6379> mset chaoren:1:name aisi chaoren:1:age 1000
OK
127.0.0.1:6379> mget chaoren:1:name chaoren:1:age
1) "aisi"
2) "1000"

应用场景:

应用场景:
  • 统计数多单位的数量
  • 计数器
  • 粉丝数
  • 对象缓存存储

2.list数据类型

##插入操作
127.0.0.1:6379> lpush list one #给list里面插入值
(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> lpush list four
(integer) 4  
127.0.0.1:6379> lrange list 0 -1  #获取list中所有值
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> rpush list zero  #从右边给list插入值
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
5) "zero" 

插入过程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o56yaAPy-1624776342766)(C:\Users\优小熊Xx\Desktop\list执行过程.png)]

##删除操作
127.0.0.1:6379> lpop list  #从左边删除
"four"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "zero" 
127.0.0.1:6379> rpop list  #从右边删除
"zero"
127.0.0.1:6379>  lrange list 0 -1
1) "three"
2) "two"
3) "one"
=============================
##获取操作
127.0.0.1:6379> lindex list 0  #通过下标获取list的值
"three"
127.0.0.1:6379> llen list  #获取list的长度
(integer) 3
===============================
##移除操作
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> lpush list four
(integer) 4
127.0.0.1:6379> lpush list one
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> lrem list 1 one  #移除list中从上到下的一个one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
===============================
##截取操作
127.0.0.1:6379> rpush mylist one  #插入
(integer) 1
127.0.0.1:6379> rpush mylist two
(integer) 2
127.0.0.1:6379> rpush mylist three
(integer) 3
127.0.0.1:6379> rpush mylist four
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1 #查看全部元素
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> ltrim mylist 1 2  #截取片段
OK
127.0.0.1:6379> lrange mylist 0 -1  #查看元素
1) "two"
2) "three"
================================
##移动操作
127.0.0.1:6379> lrange mylist 0 -1
1) "two"
2) "three"
127.0.0.1:6379> rpoplpush mylist mylist  #移除最后一个后插入到另外一个list中 若没有则创建后插入
"three"
127.0.0.1:6379> lrange mylist 0 -1
1) "three"
2) "two
===============================
##替换操作
127.0.0.1:6379> lrange mylist 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lset mylist 0 one #将指定下标的值替换,若存在则更新若不存在则不更新
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "one"
2) "two"
==================================
##指定位置插入
127.0.0.1:6379> lrange mylist 0 -1
1) "one"
2) "two"
127.0.0.1:6379> linsert mylist before one zero
(integer) 3
127.0.0.1:6379> linsert mylist after two three
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "zero"
2) "one"
3) "two"
4) "three"
应用场景:

消息排队,消息队列(lpush,rpop),栈(lpush,lpop)

set(无重复元素)数据类型

========================================================
127.0.0.1:6379> sadd myset hello #添加元素
(integer) 1
127.0.0.1:6379> sadd myset ,  
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> smembers myset  #查看元素
1) "hello"
2) ","
3) "world"
127.0.0.1:6379> sismember myset , #判断是否包含
(integer) 1
===========================================================
127.0.0.1:6379> scard myset  #获取元素个数
(integer) 3
=====================================================
127.0.0.1:6379> srem myset hello  #移除指定元素
(integer) 1
127.0.0.1:6379> smembers myset
1) ","
2) "world"
=======================================================
127.0.0.1:6379> srandmember myset  #随机抽取一个值
","
127.0.0.1:6379> srandmember myset
","
127.0.0.1:6379> srandmember myset
"world"
127.0.0.1:6379> srandmember myset
","
127.0.0.1:6379> srandmember myset 2   #随机抽取两个值
1) ","
2) "world"
127.0.0.1:6379> srandmember myset 2
1) ","
2) "world"
=======================================================
127.0.0.1:6379> smembers myset 
1) "hah"
2) "hello"
3) ","
4) "world"
5) "xixi"
127.0.0.1:6379> spop myset  #随机删除
","
127.0.0.1:6379> spop myset  #随机删除
"hah"
127.0.0.1:6379> spop myset	#随机删除
"xixi"
127.0.0.1:6379> smembers myset
1) "hello"
2) "world"
==================================================
127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> sadd myset2 nihao
(integer) 1
127.0.0.1:6379> smove myset2 myset nihao  #移动元素,两个集合之间的操作
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello"
2) "nihao"
3) "world"
127.0.0.1:6379> smembers myset2
(empty list or set)
================================================
127.0.0.1:6379> sadd set1 a
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set1 d
(integer) 1
127.0.0.1:6379> sadd set2 b
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set2 d
(integer) 1
127.0.0.1:6379> sadd set2 e
(integer) 1
127.0.0.1:6379> sdiff set1 set2  #set1对set2的差集
1) "a"
127.0.0.1:6379> sinter set1 set2 #set1对set2的交集
1) "b"
2) "d"
3) "c"
127.0.0.1:6379> sunion set1 set2  #set1对set2的并集
1) "c"
2) "b"
3) "d"
4) "a"
5) "e"

应用场景: 共同关注(微博,B站) 推荐好友

hash数据类型(和string类型没多大区别)

127.0.0.1:6379> hset myset key1 value1  #设置一个键值对
(integer) 1
127.0.0.1:6379> hget myset key1  #获取一个键值对
"value1"
127.0.0.1:6379> hmset myset key1 value1 key2 value2 key3 value3 #设置多个键值对
OK
127.0.0.1:6379> hmget myset key1 key2 key3   #获取多个键值对的值
1) "value1"
2) "value2"
3) "value3"
127.0.0.1:6379> hgetall myset  #获取全部键值对
1) "key1"
2) "value1"
3) "key2"
4) "value2"
5) "key3"
6) "value3"
127.0.0.1:6379> hdel myset key1 #删除
(integer) 1
127.0.0.1:6379> hgetall myset
1) "key2"
2) "value2"
3) "key3"
4) "value3"
127.0.0.1:6379> hlen myset  #获取表的字段数量
(integer) 2
127.0.0.1:6379> hexists myset key1  #判断是否存在某值
(integer) 0
127.0.0.1:6379> hexists myset key2
(integer) 1
127.0.0.1:6379> hkeys myset #获取所搜的key
1) "key2"
2) "key3"
127.0.0.1:6379> hvals myset  #获取所搜的value
1) "value2"
2) "value3"
127.0.0.1:6379> hincrby myset key4 1 #指定增量
(integer) 2
127.0.0.1:6379> hsetnx myset key5 xixi  #若不存在则创建后赋值,若存在则失败
(integer) 1
127.0.0.1:6379> hget myset key5
"xixi"
应用场景:用户信息的保存 ,经常变动的信息 hash更适合对象,string更适合字符串

Zset(有序)数据类型(比set多了一个score)

127.0.0.1:6379> zadd myset 500 xixi      #插入
(integer) 1
127.0.0.1:6379> zadd myset 5000 haha
(integer) 1
127.0.0.1:6379> zadd myset 2500 heihei
(integer) 1 
127.0.0.1:6379> zrangebyscore myset -inf +inf   #排序 从小到大
1) "xixi"
2) "heihei"
3) "haha"
127.0.0.1:6379> zrevrange myset 0 -1 #从大到小
1) "haha"
2) "xixi"
127.0.0.1:6379> zrange myset 0 -1 #从小到大
1) "xixi"
2) "haha"
127.0.0.1:6379> zrangebyscore myset -inf +inf withscores  #附带score  从低到高
1) "xixi"
2) "500"
3) "heihei"
4) "2500"
5) "haha"
6) "5000"
127.0.0.1:6379> zrevrangebyscore myset -inf +inf withscores  #附带score  从低到高
1) "xixi"  
2) "500"
3) "heihei"
4) "2500"
5) "haha"
6) "5000"
127.0.0.1:6379> zrangebyscore myset -inf 2500  #小于2500
1) "xixi"
2) "heihei"
127.0.0.1:6379> zrange myset 0 -1
1) "xixi"
2) "heihei"
3) "haha"
127.0.0.1:6379> zrem myset heihei   #移除
(integer) 1  
127.0.0.1:6379> zrange myset 0 -1
1) "xixi"
2) "haha"  
127.0.0.1:6379> zcard myset   #获取个数
(integer) 2
127.0.0.1:6379> zrevrange myset 0 -1
1) "haha"
2) "xixi"
127.0.0.1:6379> zadd myset 200 ouou #增加
(integer) 1
127.0.0.1:6379> zadd myse 10000 hehe #增加
(integer) 1
127.0.0.1:6379> zrange myset 0 -1  #获取全部
1) "ouou"
2) "xixi"
3) "haha"
127.0.0.1:6379> zcount myset 200 10000  #score在某个区间个数
(integer) 3
应用场景:
  1. 排序,班级成绩表,工资表排序

  2. 带权重进行判断,普通消息 1,重要消息2

  3. 排行榜的实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值