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
-
排行榜的实现