您现在的位置是:首页 > 文章详情

解析Redis操作五大数据类型常用命令

日期:2021-12-21点击:206
摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法。

本文分享自华为云社区《Redis操作五大数据类型常用命令解析》,作者:灰小猿。

Redis的几个常用命令

数据库切换

我们知道Redis默认有16个数据库,默认是第0个数据库,

那么如果在需要对数据库进行切换的时候,我们就可以使用下面这个命令:

使用如下命令进行切换

SELECT index

清除当前数据库的数据

如果想要清除指定某一个数据库的数据,

flushdb

清除所有数据库的数据

flushall

查看数据库所有key

接下来这个命令应该是最常用的了,

keys *

判断某个键是否存在

平常在开发中,我们还需要经常对key进行判断,判断其是否存在,

exists key

设置过期时间和查看剩余时间

因为我们设置的缓存数据一般都不能是永久的,这个时候就需要我们在存储数据的时候,就为其设置过期时间。

127.0.0.1:6379> expire test01 10 (integer) 1 127.0.0.1:6379> ttl test01 (integer) -2

查看当前key的类型

type keyname

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使用

  • 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类型移除元素

  • lpop 从左边删除
  • rpop 从右边删除
  • lrange keyname 0 -1 获取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的意思

总结:

  • redis中的list其实是一个链表。before node after,left,right都可以插入值
  • 如果key不存在,就创建新的链表
  • 如果key存在,就新增内容
  • 如果移除了所有值,空链表,也代表不存在
  • 在两边插入或改动值效率最高,中间元素效率相对来说会低一点

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并集

SDIFF keyname1 keyname2

总结

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,带权重进行判断
  • 排行榜应用实现

以上是在对五种数据类型进行存取时的一些常用命令操作。关于其他的命令使用,小伙伴们在用到的时候可以直接入官网查看就可以了

 

点击关注,第一时间了解华为云新鲜技术~

原文链接:https://my.oschina.net/u/4526289/blog/5375846
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章