摘要:分享经常用到一些命令和使用场景总结,以及对 Redis 中五大数据类型如何使用 cmd 命令行的形式进行操作的方法。
本文分享自华为云社区《Redis操作五大数据类型常用命令解析》,作者:灰小猿。
Redis 的几个常用命令
数据库切换
我们知道 Redis 默认有 16 个数据库,默认是第 0 个数据库,那么如果在需要对数据库进行切换的时候,我们就可以使用下面这个命令:
使用如下命令进行切换
清除当前数据库的数据
如果想要清除指定某一个数据库的数据
清除所有数据库的数据
查看数据库所有 key
接下来这个命令应该是最常用的了
判断某个键是否存在
平常在开发中,我们还需要经常对 key 进行判断,判断其是否存在
设置过期时间和查看剩余时间
因为我们设置的缓存数据一般都不能是永久的,这个时候就需要我们在存储数据的时候,就为其设置过期时间。
127.0.0.1:6379> expire test01 10
(integer) 1
127.0.0.1:6379> ttl test01
(integer) -2
复制代码
查看当前 key 的类型
string 数据类型
string 类型是 Redis 中五大基本数据类型之一,这也是最常使用到的一个数据类型,所有很多小伙伴们对 Redis 的认识和操作就仅仅的停留在了对 Redis 的操作层面,但是你是否知道 string 类型中的相关命令,还是有非常多实用的
String 类型存取基本操作
接下来先看一下对 string 类型进行基本存储和获取的命令。
127.0.0.1:6379> set key1 v1 #设置key和value
OK
127.0.0.1:6379> get key1 #获取key对应的value
"v1"
127.0.0.1:6379> keys * #获取所有的key
1) "key1"
2) "mykey"
3) "hxy"
4) "site-list"
5) "hxy2"
6) "huixiaoyuan"
127.0.0.1:6379> exists key1 #查看当前key是否存在
(integer) 1
127.0.0.1:6379> append key1 hello #给当前key的value后面追加
(integer) 7
127.0.0.1:6379> strlen key1 #获取value的长度
(integer) 7
复制代码
递增递减操作
如果我们存储的 string 中的内容是数字的话,我们也可以对其进行增或减操作,Redis 可以自动的对字符串进行相关的操作。实现的命令如下:
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> incrby views 10
(integer) 9
127.0.0.1:6379> decrby view 9
(integer) -9
127.0.0.1:6379> get views
"9"
127.0.0.1:6379> decrby views 9
(integer) 0
127.0.0.1:6379>
复制代码
setex 和 setnx 使用
#设置key3的值为hello,过期时间为30秒
127.0.0.1:6379> setex key3 30 hello
OK
127.0.0.1:6379> ttl key3
(integer) 21
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> setnx mykey2 redis
(integer) 1
127.0.0.1:6379> setnx mykey2 hxy
(integer) 0
127.0.0.1:6379> get mykey2
"redis"
127.0.0.1:6379>
复制代码
mset 和 mget 进行批量设置
使用 msetnx 时,同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在时才成立。
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379>
复制代码
getset 命令使用
getset 命令从字面意思就可以看出来,他的作用是先 get 再 set。
#如果不存在值,则返回null
127.0.0.1:6379> getset k5 v5
(nil)
127.0.0.1:6379> get k5
"v5"
如果存在值,就先获取再设置新的值
127.0.0.1:6379> getset k5 vv5
"v5"
127.0.0.1:6379> get k5
"vv5"
复制代码
总结 string 类似的使用场景:
list 数据类型
list 存取基本操作
在使用 list 类型进行存取的时候,有两个命令需要进行区分:
lpush:从左边插入元素
rpush:从右边插入元素
127.0.0.1:6379> lpush list1 v1
(integer) 1
127.0.0.1:6379> lpush list1 v2
(integer) 2
127.0.0.1:6379> lpush list1 v3
(integer) 3
127.0.0.1:6379> lrange list1 0 1
1) "v3"
2) "v2"
127.0.0.1:6379> rpush list1 v4
(integer) 4
127.0.0.1:6379> lrange list1 0 4
1) "v3"
2) "v2"
3) "v1"
4) "v4"
复制代码
list 类型移除元素
127.0.0.1:6379> lpop list1
"v3"
127.0.0.1:6379> rpop list1
"v4"
127.0.0.1:6379> lrange list1 0 -1
1) "v2"
2) "v1"
127.0.0.1:6379>
复制代码
注意:只有 pop 和 push 才分左右,其他的 l 都是 list 的意思
总结:
set 集合
set 集合存取基本操作
127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> sadd myset hello2
(integer) 1
127.0.0.1:6379> sadd myset hello3
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello"
2) "hello3"
3) "hello2"
127.0.0.1:6379> sismember myset hello
(integer) 1
127.0.0.1:6379> sismember myset world
(integer) 0
127.0.0.1:6379>
复制代码
获取 set 中元素个数
127.0.0.1:6379> scard myset
(integer) 3
复制代码
移除 set 集合中的指定元素
127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> scard myset
(integer) 2
复制代码
随机抽选出指定个数的元素
127.0.0.1:6379> srandmember myset
"hello3"
127.0.0.1:6379> srandmember myset 2
1) "hello2"
2) "hello3"
复制代码
随机删除一个元素
127.0.0.1:6379> spop myset
"hello2"
复制代码
SDIFF 差集 SINTER 交集 SUNION 并集
总结 set 集合一般用于元素的不重复的场景,比如抽奖系统,轮播等场景下
Hash(哈希)
Hash 存取基本操作
在使用 hash 集合的时候,要注意,hash 其实就是一个 Map 集合,key-map 的时候,值是一个 map 集合的形式进行存储的,也和 Java 中的 hashmap 有一个类似。
#set一个具体的key-value
127.0.0.1:6379> hset myhash fieid1 v1
(integer) 1
127.0.0.1:6379> hget myhash fieid1
"v1"
#set多个key-value
127.0.0.1:6379> hmset myhash fieid1 v1 fieid2 v2
OK
#get多个字段值
127.0.0.1:6379> hmget myhash fieid1 fieid2
1) "v1"
2) "v2"
复制代码
HVALS 获取所有的 value,HKEYS 获取所有的 key,HGETALL 获取所有的键值
127.0.0.1:6379> HVALS myhash
1) "v1"
2) "v2"
127.0.0.1:6379> HKEYS myhash
1) "fieid1"
2) "fieid2"
127.0.0.1:6379> HGETALL myhash
1) "fieid1"
2) "v1"
3) "fieid2"
4) "v2"
复制代码
总结:
hash 可以用于存储变更的数据,比如 user,name,age 等,尤其是用户信息之类的,hash 更加适合用于对象的存储,string 更加适合用于字符串的存储。
Zset(有序集合)
在 set 集合的基础上增加一个序列号,来进行排序
Zset 有序集合存取基本操作
127.0.0.1:6379> ZADD salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> ZADD salary 6000 dahui
(integer) 1
127.0.0.1:6379> ZADD salary 1000 wanggang
(integer) 1
#指定输出范围是负无穷到正无穷,按照从小到大排序,
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf
1) "wanggang"
2) "xiaohong"
3) "dahui"
# 从大到小排序
127.0.0.1:6379> ZREVRANGE salary 0 -1
1) "dahui"
2) "xiaohong"
3) "wanggang"
复制代码
ZRANGEBYSCORE 使用语法
ZRANGEBYSCORE key min max
复制代码
显示所有数据,并且 key 和 value 同时显示
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores
1) "wanggang"
2) "1000"
3) "xiaohong"
4) "2500"
5) "dahui"
6) "6000"
复制代码
获取集合中元素的个数
127.0.0.1:6379> ZCARD salary
(integer) 3
复制代码
总结
案例思路:set 排序,存储班级成绩,工资表排序
普通消息 1,重要消息 2,带权重进行判断
排行榜应用实现
以上是在对五种数据类型进行存取时的一些常用命令操作。关于其他的命令使用,小伙伴们在用到的时候可以直接入官网查看就可以了。
点击关注,第一时间了解华为云新鲜技术~
评论