摘要:分享经常用到一些命令和使用场景总结,以及对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. SuperEdge再添国产智能加速卡支持,为边缘智能推理再提速10倍

    作者 寒武纪AE团队,腾讯云容器中心边缘计算团队,SuperEdge 开发者 SuperEdge 支持国产智能加速卡寒武纪 MLU220 SuperEdge 对应的商业产品 TKE Edge 也一直在 ...

  2. Atcoder Grand Contest 024 E - Sequence Growing Hard(dp+思维)

    题目传送门 典型的 Atcoder 风格的计数 dp. 题目可以转化为每次在序列中插入一个 \([1,k]\) 的数,共操作 \(n\) 次,满足后一个序列的字典序严格大于前一个序列,问有多少种操作序 ...

  3. Codeforces 1383E - Strange Operation(线段树优化 DP or 单调栈+DP)

    Codeforces 题目传送门 & 洛谷题目传送门 Yet another 自己搞出来的难度 \(\ge 2800\) 的题 介绍一个奇奇怪怪的 \(n\log n\) 的做法.首先特判掉字 ...

  4. 【讨论】APP的免填邀请码解决方案

    00x0 具体需求 app中已注册的用户分享一个含有邀请码的二维码,分享到朋友圈新用户在朋友圈打开这个这个链接下载app.新用户安装后打开app后就自动绑定邀请码要求用户不填写任何东西 朋友老板出差给 ...

  5. 数据库时间和 java 时间不一致解决方案

    java添加 date 到数据库,时间不一致 使用 date 添加到数据库,数据库显示的时候和date时间相差 8 个小时,这是由于 mysql 上的时区的问题,这里有两个解决方案: 方案一: 设置数 ...

  6. 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn

    1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ...

  7. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  8. LeetCode33题——搜索旋转排序数组

    1.题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存 ...

  9. Copy constructor vs assignment operator in C++

    Difficulty Level: Rookie Consider the following C++ program. 1 #include<iostream> 2 #include&l ...

  10. 为Python的web框架编写前端模版的教程

    虽然我们跑通了一个最简单的MVC,但是页面效果肯定不会让人满意. 对于复杂的HTML前端页面来说,我们需要一套基础的CSS框架来完成页面布局和基本样式.另外,jQuery作为操作DOM的JavaScr ...