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

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

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

解析Redis操作五大数据类型常用命令的更多相关文章

  1. Redis五大数据类型常用命令脑图

  2. Redis(三)--- Redis的五大数据类型的底层实现

    1.简介 Redis的五大数据类型也称五大数据对象:前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject:这个对象系统包 ...

  3. 面试官:讲讲Redis的五大数据类型?如何使用?(内含完整测试源码)

    写在前面 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部分问题都能够在我的公众号[冰河技术]中找到答案,面试过程还是挺轻松的,最终也是轻松的拿到了Off ...

  4. redis之五大数据类型

    redis之五大数据类型 redis redis的两种链接方式 简单链接 1234 import redisconn = redis.Redis(host='10.0.0.200',port=6379 ...

  5. Redis的五大数据类型以及key的相关操作命令

    Redis的五大数据类型 redis的数据都是以key/value存储,所以说,五大类型指的是value的数据类型 String 字符串,作为redis的最基本数据类型 redis中的string类型 ...

  6. CentOS系统操作mysql的常用命令

    MySQL名字的来历MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了 ...

  7. redis学习-集合set常用命令

    redis学习-集合set常用命令   1.sadd:添加一个元素到集合中(集合中的元素无序的并且唯一) 2.smembers:查看集合中所有的元素(上图事例) 3.srem:删除结合中指定的元素 4 ...

  8. redis学习-散列表常用命令(hash)

    redis学习-散列表常用命令(hash)   hset,hmset:给指定散列表插入一个或者多个键值对 hget,hmget:获取指定散列表一个或者多个键值对的值 hgetall:获取所欲哦键值以及 ...

  9. 【Redis】基本数据类型及命令操作(超详细)

    一.String 1.1 概述 1.2 相关命令列表 1.3 命令示例 二.List 2.1 概述: 2.2 相关命令列表: 2.3 命令示例: 2.4 链表结构的小技巧: 三.Hashes 3.1 ...

随机推荐

  1. MySQL数据库之大厂面试必备技能v8.0.27

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 MySQL官方地址 https://www.mysql.com/ MySQL 8系列最新版本为8.0.27,5系列的最 ...

  2. HDU 6984 - Tree Planting(数据分治+状压 dp)

    题面传送门 傻逼卡常屑题/bs/bs,大概现场过得人比较少的原因就是它比较卡常罢(Fog 首先对于这样的题我们很难直接维护,不过注意到这个 \(n=300\) 给得很灵性,\(k\) 比较小和 \(k ...

  3. Session和Cookie的原理,以及在分布式应用中出现的问题和解决方案

    产生原因 由于http协议是无状态的,同一个浏览器对服务器的两次请求之间是没有关系的,服务器认为两次请求都是全新的请求,不会记住上次请求成功的数据.然而现有的业务常常需要服务器能记住用户的访问情况, ...

  4. 【机器学习与R语言】13- 如何提高模型的性能?

    目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...

  5. Augustus 进行基因注释

      目前的从头预测软件大多是基于HMM(隐马尔科夫链)和贝叶斯理论,通过已有物种的注释信息对软件进行训练,从训练结果中去推断一段基因序列中可能的结构,在这方面做的最好的工具是AUGUSTUS它可以仅使 ...

  6. OpenSSH 密码和公钥认证原理探究

    目录 配置和保护SSH H3 - 使用SSH 访问远程命令行 H4 - 什么是OpenSSH ? H4 - 登录方式: H4 - 登录并执行临时命令: H4 - 查看登录用户 H4 - 登录原理 密码 ...

  7. c#表中信息点击跳转

    OnRowCommand="gridInfoData_RowCommand" <Columns> <asp:ButtonField HeaderText=&quo ...

  8. 链栈(C++)

    链栈,字面意思,就是用链表来实现一个栈的数据结构. 那么,只需将单链表的头节点当作栈顶,尾节点当作栈底.入栈只需要头插,出栈只需头删即可.所以只需要吧单链表稍微阉割一下就可以得到链式栈了.代码如下 / ...

  9. Docker学习(一)——安装docker

    Suse12上安装docker   对于suse13.2之后的版本,因为docker已经被添加到了suse仓库中,直接使用sudo zypper install docker即可.   suse12不 ...

  10. 3.5 Rust Generic Types, Traits, and Lifetimes

    Every programming language has tools for effectively handling the duplication of concepts. In Rust, ...