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


    摘要:分享经常用到一些命令和使用场景总结,以及对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,带权重进行判断
    • 排行榜应用实现

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

     

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

  • 相关阅读:
    Windows7,Ubuntu双系统,用MBR引导
    把Adblock Plus的过滤规则应用到IE9
    Linux shell学习
    vxworks下面网络连接调试的搭建
    uboot网卡成功识别
    uboot功能扩展篇
    uboot终于显示串口信息了
    uboot解决flash failed无限挂起的问题
    问题解决随笔
    琐事皆休,开始找工作~
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/15714605.html
Copyright © 2020-2023  润新知