文章目录
Redis的通用指令
本文记述的Redis通用指令包括key通用指令、数据库通用指令。
1、key通用指令
1.1、key特征
key是一个字符串,我们通过key来获取保存在Redis中的数据。
1.2、key基本操作
# 删除指定key
del key
# 获取key是否存在
exists key
# 获取key的类型
type key
# 实际操作举例
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> type name
string
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> exists name
(integer) 0
1.3、key通用操作
1.3.1、key扩展操作(时效性控制)
# 为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
# 获取key的有效时间
ttl key
pttl key
# 切换key从“时效性”转为“永久性”
persist key
# 实际操作举例
127.0.0.1:6379> set list zhangsan
OK
127.0.0.1:6379> get list
"zhangsan" # 可以通过key获取相应的值
127.0.0.1:6379> expire list 20
(integer) 1 # 给key(list)设置20s有效期
127.0.0.1:6379> ttl list
(integer) 17 # 17s
127.0.0.1:6379> ttl list
(integer) 10 # 10s
127.0.0.1:6379> get list
"zhangsan" # 有效期内依旧可以正常获取
127.0.0.1:6379> ttl list
(integer) -2 # 20s后,访问的key已经不存在了
# 注:
1、如果一个key不存在,返回-2
2、如果一个key存在
2.1、但没有设置有效期,则返回-1
2.2、若设置有效期,则返回有效时长
127.0.0.1:6379> get list
(nil) # 20s后,key已经不存在了
1.3.2、扩展操作(查询模式)
# 查询key
ksys pattern
# pattern为查询模式规则:
* :匹配任意数量的任意符号
? :匹配一个任意符号
[]: 匹配一个指定符号
# 举例
#查询所有
keys *
#查询所有以it开头
keys it*
#查询所有以ok结尾
keys *ok
#查询所有前面两个字符任意,后面以zhku结尾
keys ??zhku
#查询所有以user:开头,最后一个字符任意
keys user:?
#查询所有以u开头,以er:1结尾,中间包含一个字母,s或t
keys u[st]er:1
# 实际操作举例
127.0.0.1:6379> set Java Java
OK
127.0.0.1:6379> set Redis Redis
OK
127.0.0.1:6379> set Spring Spring
OK
127.0.0.1:6379> set Dubbo Dubbo
OK
127.0.0.1:6379> set SpringBoot SpringBoot
OK
127.0.0.1:6379> keys * # 查询所有的key
1) "A"
2) "Java"
3) "Spring"
4) "Dubbo"
5) "Redis"
6) "SpringBoot"
127.0.0.1:6379> keys [J]ava # 查询以ava结尾,J开头的key
1) "Java"
127.0.0.1:6379> keys Spring* # 查询以Spring开头的key
1) "Spring"
2) "SpringBoot"
1.3.3、key其他操作
# 为key改名
rename key newkey
renamenx key newkey # nx表示not exist,即如果newkey已经存在则修改不成功
# 对所有的key排序
sort
# 其他key通用操作
help @genneric
# 实际操作举例
127.0.0.1:6379> lpush aa 123
(integer) 1
127.0.0.1:6379> lpush aa 321
(integer) 2
127.0.0.1:6379> lpush aa 222
(integer) 3
# 注:集合从左到右依次为 222 -> 321 -> 123
127.0.0.1:6379> lrange aa 0 -1
1) "222"
2) "321"
3) "123"
127.0.0.1:6379> sort aa
1) "123"
2) "222"
3) "321"
127.0.0.1:6379> lrange aa 0 -1
1) "222"
2) "321"
3) "123"
# 注:由上可以看出,sort只是排序后输出,并不会改变原集合
127.0.0.1:6379> rename aa newAa
OK
127.0.0.1:6379> lrange newAa 0 -1
1) "222"
2) "321"
3) "123"
1.4、数据库通用指令
1.4.1、key的重复问题
key的重复问题:
- key是由程序员定义的
- Redis在使用的过程中,随着数据量的增大,若不区分种类,极易出现重复或者冲突
解决方案:
- Redis为每个服务提供有16个数据库编号从0~15
- 每个数据库之间的数据相互独立
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NmfMByq4-1652885180534)(3_redis的通用指令.assets/image-20211022200056458.png)]
1.4.2、数据库基本操作
# 切换数据库
select index
# 其他操做
quit # 退出
ping # 测试服务器是否连通
echo # 打印
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 15
OK # 切换到[1]号数据库
127.0.0.1:6379[15]> echo zhangsan
"zhangsan" # 打印"zhangsan"
127.0.0.1:6379[15]> ping
PONG
127.0.0.1:6379[15]> ping abc
"abc"
127.0.0.1:6379[15]> select 0
OK
127.0.0.1:6379>
# 我们默认使用的就是0号数据,6379端口后面没有“[0]”
1.4.3、数据相关操作
# 数据移动
# 注:移动操作必须保证目标数据库不存在这个key,否则失败
move key db
# 数据清除
dbsize # 当前数据库有多少个key
flushdb # 刷掉当前数据库的数据
slushall # 刷掉所有数据库的数据
# 实际操作举例
127.0.0.1:6379> set name zhangsan
OK # 给0号数据库中添加name
127.0.0.1:6379> select 1
OK # 切换到1号数据库
127.0.0.1:6379[1]> get name
(nil) # 通过key获取value,获取不到
127.0.0.1:6379[1]> select 0
OK # 切换到0号数据库
127.0.0.1:6379> get name
"zhangsan" # 通过key获取value,正常获取
127.0.0.1:6379> move name 1
(integer) 1 # 将0号数据库中的name转移到1号数据库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name
"zhangsan" # 通过key获取value,正常获取
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> move name 2
(integer) 0 # 将0号数据库中的name转移到1号数据库之后,0号数据库就不存在name这个key了
注:如有错误,敬请指正!!!