本文首发于公众号:Hunter后端

原文链:Redis基础命令汇总,看这篇就够了

本篇笔记将汇总 Redis 基础命令,包括几个常用的通用命令,和各个类型的数据的操作,包括字符串、哈希、列表、集合、有序集合等在内的基本操作。

以下是本篇笔记目录:

  1. 通用命令
  2. 字符串命令
  3. 哈希命令
  4. 列表命令
  5. 集合命令
  6. 有序集合命令

1、通用命令

keys *

返回所有 key,可以使用通配符来查询。

 # 查看所有 key
keys * # 查看以 hel 开头的 key
keys hel* # 查看 ph + 一个字符
keys ph?

注意:一般不要使用 keys 这个操作,Redis 是单线程,执行之后如果耗时过久会造成阻塞。

dbsize

统计当前 db key 的总数:

select 1
dbsize

exists key

查看某个 key 是否存在,存在则返回 1,不存在返回 0

exists key
# 1

del key [key ...]

删除一个或多个 key:


# 删除 key
del key1 # 删除 key1、key2
del key1 key2

成功删除 n 个 key,返回整数 n

expire key n

给 key 设置 n 秒后过期

假设给 key 为 hello 的数据设置 3 秒后过期:

expire hello 3

三秒后,我们尝试获取 hello 数据,就会发现返回空了。

# after 3 seconds ...
get hello

ttl key

查看 key 剩余过期时间,假设我们前面设置的过期时间很长,在数据未过期的时候使用这个命令:

ttl hello

就会返回 hello 剩余的过期时间。

persist key

在 key 还未过期的时候,使用这个命令,可以去除 key 上的过期时间:

persist hello

type key

返回 key 的类型,后面我们会介绍 Redis 的几种基本数据类型。

Redis 几种数据类型是:字符串、哈希、列表、集合、有序集合

2、字符串命令

在 Redis 中存储字符串,就是一个 key-value 的结构。

其中,value 可以是字符串,也可以是数字,对于数字 Redis 会自动识别,且可以使用一些字符串没有的操作,比如增加、减少等。

但在设置和存储的过程中,字符串和数字都是一样的使用方式。

1.字符串的增删改查

字符串的增删改查操作是 get、set、del。其中 set 操作可以是增加数据,也可以是更新数据。

接下来我们对 key 为 hello 的数据进行操作:

# 增加 hello 的值为 world
set hello world # 获取 hello 的值
get hello # 更新 hello 的值为 "new world"
set hello "new world" # 删除 hello
del hello

2.set 操作数据的几种用法

前面介绍的 set,如果存在则更新,不存在则增加,如果我们想要实现存在 key 就更新,以及不存在 key 则创建的逻辑,可以如此操作:

不存在则设置,存在则不操作

setnx 可以实现我们这个逻辑:

if not exists:
insert
else:
pass

比如我们执行:

del a
setnx a 1
setnx a 2

上面的操作之后,尽管我们的 setnx 执行了两遍,但前面已经设置过了 a 的值,所以第二个操作不会执行了。

存在则更新,不存在则不操作

set key value xx,注意,xx 是固定用法,比如我们想 a 的值如果存在于系统,则更新 a 的值为 2,不存在的话则不操作,可以如下:

set a 2 xx

那么如果系统之前没有 a 的值存在,那么执行这个命令之后,系统也不会有 a 这个 key。

3.整数的操作

对于字符串类型的数据,可以存储字符串也可以存储整数,对于整数,有一些额外的操作,比如自增1,自减1,自增n,自减n。

incr 自增 1
# 为 a 初始化设置值为 3
set a 3 # 进行自增 1 的操作
incr a
decr 自减 1
decr a

注意:如果 incr 和 decr 的 key 之前在 Redis 中不存在,那么系统会默认先 set key 0,然后进行自增自减的操作

incrby 自增 n
# 对 a 进行自增 5
incrby a 5
decrby 自减 n
# 对 a 进行自减 5
decrby a 5

4.小数的操作

对应于整数,小数也可以进行自增的操作

incrbyfloat 自增某个小数

incrbyfloat a 3.4

但是,并没有相应的小数数自减操作,但是我们可以通过在 value 加负号来表示自减操作:

incrbyfloat a -3.4

5.字符串的范围操作

对于一个字符串,比如我们设置:

set a "this is a string"
getrange

我们通过 get 可以获取 a 的全量字符串,也可以通过 getrange 下标来指定范围获取:

getrange a 1 3

表示获取从 1 开始到 3 之间的字符串,下标从 0 开始。

setrange

也可以通过下标设置字符串内容:

setrange a 5 xxxx

上面的操作表示将 a 字符串在第 6 个的位置的字符串替换成 xxxx,那么 a 的结果应该是:

get a
# "this xxxx string"

6.字符串的字符操作

getset

先获取 key 的 value,然后对 key 设置新的 value:

getset a "new value"
append

将 value 追加到 key 的旧 value 的末尾:

set a "abc"
append a "def"
get a
# "abcdef"
strlen

获取字符串的长度:

strlen a
# 6

7.批量操作

mget

批量获取 key 列表的值,比如我们有 a,b,c 三个 key,我们想同时返回三个 key 的数据:

mget a b c
# 以下是返回:
#1) "abcdef"
#2) "1"
#3) "world"
mset

批量设置 key 列表的值,一个 key 后跟一个 value,比如我们设置三个 key,a、b、c 的 value 分别是 1,2,3:

mset a "1" b "2" c "3"

3、哈希命令

因为 Redis 存储的数据类型是一个 key-value 的结构,而哈希本身的数据类型也是一个 key-value 的类型,所以哈希数据相当于是一个嵌套的类型,这个地方需要了解清楚它的概念。

在下面的例子中,我们将 Redis 中的 key 称为 key,而哈希中的 key-value 中对应的 key 称为 field 以示区分。

哈希命令的前面都带一个 h,这是哈希命令的一个特点。

接下来,我们以一个例子来介绍哈希命令,我们想要存入一个这样的数据,key 为 student,它有 name,number,rank 三个 field 属性,大致如下:

{
"student":
{
"name": "Hunter",
"number": "00001",
"rank": 1
}
}

1.哈希数据的增删改查

这里我们要设置 student 的几个属性值,创建和更新都用 heset

hset student name "Hunter"
hset student number "00001"
hset student rank 1

使用 hget 查询数据:

hget student name

使用 hdel 删除数据:

hdel student name

如果是直接删除 student 这个 key 呢,直接使用 del:

del student

2. hexists 和 hlen

hexists 是用于查看 key 下某个 field 属性是否存在,假设前面的 student 数据没有删除,我们这样使用:

hexists student name
# 1

返回的结果是 1 则表示 name 这个 field 存在,不存在的话会返回 0

hlen 用于查看 key 下存在多少个 field 属性:

hlen student

3. hmget 和 hmset

批量查看和设置哈希数据下的属性。

比如我们想一次性查看 student 下的 name 和 number 属性的值,可以使用 hmget

hmget student name number
#1) "Hunter"
#2) "00001"

也可以使用 hmset 来批量设置:

hmset student name "Jack" rank "2"

4. 查看某个 key 下所有数据

如果我们想查看某个 key 下所有的 field 属性,可以使用 hkeys

hkeys student
#1) "name"
#2) "number"
#3) "rank

返回的是所有 field 属性

如果我们想查看某个 key 下所有的 field 属性下的值,可以使用 hvals

hvals student
#1) "Jack"
#2) "00001"
#3) "2"

如果我们想查看某个 key 下所有的 field 属性和对应的值,可以使用 hgetall

hgetall student
#1) "name"
#2) "Jack"
#3) "number"
#4) "00001"
#5) "rank"
#6) "2"

会将 field-name 依次返回。

4、列表命令

对于 Redis 中的列表数据,一般是以 l 开头,为了方便记忆,可以理解成是 List,或者是 Left 中的 L,为什么要提 Left 以及说一般是以 l 开头呢,因为有一些操作是 r 开头,这个表示是对列表的右边进行数据操作。

1. 列表数据的增加

lpush

从列表左边添加一个或多个数据:

lpush rank 1
lpush rank 2 8
rpush

从列表右边添加一个或多个数据:

rpush rank 3
rpush rank 4 5
linsert

在指定的 value 前或者后面插入一个 new_value,比如我们在 2 前插入 1.5

linsert rank before 2 1.5

或者在 2后面插入 2.5:

linsert rank after 2 2.5

如果列表中有重复数据怎么办?

系统会从左边开始寻找,找到的第一个目标数据的位置就停止查找,然后插入。

2. 列表数据的查看

lrange

通过下标查看数据范围,比如我们想查看第二个到第五个之间的数据:

lrange rank 1 4

如果想查看全部列表数据:

lrange rank 0 -1
lindex

通过下标索引获取数据,比如想查看第三个数据:

lindex rank 2
llen

获取列表长度:

llen rank

3. 列表数据的删除

lpop

从列表左边弹出一个数据:

lpop rank
rpop

从列表右边弹出一个数据:

rpop rank
lrem

这是一个遍历删除的操作,它的命令示例如下:

lrem key count value

当 count 大于 0 时,表示从左到右删除最多 count 个值为 value 的数据

当 count 小于 0 时,表示从右到左删除最多 count 个值为 value 的数据

当 count 等于 0 时,表示删除列表中全部值为 value 的数据

比如我们设置 rem_list 的值如下:

lpush rem_list 1 3 3 5 3 8 5

接下来我们从左到右删除两个 value 等于 3 的数据:

lrem rem_list 2 3

执行之后,rem_list 中应该还剩一个 3

如果我们想删除 rem_list 中全部 value 等于 5 的数据:

lrem rem_list 0 5
ltrim

按照索引范围修剪列表:

ltrim key start end

比如我们只保留从最开始到第四个元素的数据:

rpush trim_list 0 1 2 3 4

ltrim trim_list 0 3

4. 列表数据的修改

lset

修改某个索引的数据,比如修改第三个位子的数据:

lset a 2 8

5、集合命令

集合中的数据是无序的,无重复的。

集合相关的命令都是以 s 开头的

1. 集合的增删改查

sadd

向集合中添加数据,可添加单个或多个元素

del a
sadd a 1
sadd a 2 3 4
smembers

查看集合中所有元素:

smembers a
sismember

查看元素是否在集合中,这个命令就是 is member

sismember a 2
scard

获取集合中元素的总数:

scard a
srandmember

使用命令示例为 srandmember key [count]

表示从 key 中获取 count 个元素,如果不定义 count,则默认取出一个元素

# 取出一个元素
srandmember a # 取出两个元素
srandmember a 2

注意:这个命令为获取元素,但是并非从集合中弹出,而是单纯的获取,原集合不会变

srem

从集合中弹出一个或多个指定元素:

# 从集合中弹出 2 4 8 三个元素
srem a 2 4 8
spop

从集合中弹出一个或多个元素,这个命令执行之后集合中就会将该元素剔除:

spop a

# 从集合中弹出两个元素
spop a 2

2. 集合间操作

sdiff

求取两个集合的差值,比如两个集合为 a 和 b,结果即为 a - b:

sadd a 1 2 3
sadd b 3 4 5 sdiff a b
# 1 2
sinter

求取两个集合交集:

sinter a b
# 3
sunion

两个集合并集:

sunion a b
# 1 2 3 4 5

6、有序集合命令

有序集合兼具了列表和集合的特点,它是无重复的,但是是有序的

我们通过给元素添加额外的分数属性来实现元素的有序操作。

1. 元素的增加

zadd

命令示例为:

zadd key score element

假设我们要实现 Python、Java、Golang 三个元素的排名分别在 1、2、3,可以这样操作:

del a
zadd a 2 Java
zadd a 1 Python 3 Golang

2. 元素的查看

zrange

查看元素指定索引范围元素,可以通过 WITHSCORES 参数决定是否返回对应的排名分值:

zrange a 0 2
#1) "Python"
#2) "Java"
#3) "Golang"

返回排名 score:

zrange a 0 2 WITHSCORES
#1) "Python"
#2) "1"
#3) "Java"
#4) "2"
#5) "Golang"
#6) "3"
zrangebyscore

通过分数区间返回元素:

zrangebyscore a 1 3

返回有序集合中分数在 1 和 3 之间的元素

zscore

返回指定元素的分数:

zscore a Python
zrank

返回指定元素的排名次序:

zrank a Python
zcard

返回元素的总个数:

zcard a
zcount

返回指定分数区间元素个数,比如返回分数在 1 到 3 之间,包括 1 和 3 的元素个数:

zcount a 1 3

3. 元素分数操作

zincrby

指定元素增加/减少分数

比如指定元素为 Python 的分数 +1

zincrby a 1 Python

4. 删除操作

zrem

删除某个元素:

zrem a Java
zremrangebyrank

删除指定排名內的元素

前面我们通过 zrank 返回指定元素的排名,这里是删除操作:

zremrangebyrank a 1 3
zremrangebyscore

删除指定分数段内的元素

zremrangebyscore a 1 3

如果想获取更多后端相关文章,可扫码关注阅读:

Redis基础命令汇总,看这篇就够了的更多相关文章

  1. Java 集合基础入门,看这篇就够了

    集合 1.父接口:Collection java.util.Collection 是进行单对象保存的最大父接口,即每次利用 Collection 接口都只能保存一个对象信息.定义如下: public ...

  2. 转 Redis 总结精讲 看一篇成高手系统-4

    转 Redis 总结精讲 看一篇成高手系统-4 2018年05月31日 09:00:05 hjm4702192 阅读数:125633   本文围绕以下几点进行阐述 1.为什么使用redis 2.使用r ...

  3. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  4. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  5. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...

  6. Vue学习看这篇就够

    Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户界面(UI)的渐进式JavaScript框架 库和框架的区别 我们所说的前端框架与库的 ...

  7. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  8. net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了   原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...

  9. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  10. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

随机推荐

  1. Scanner进阶使用

    Scanner 进阶使用 package com.andy.base.scanner; import java.util.Scanner; public class Demo04 { public s ...

  2. Java(单元测试,反射)

    单元测试.反射 一.单元测试 1.1 单元测试快速入门 所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试. 我们想想,咱们之前是怎么进行测试的呢? 比如说我们写了一个学生管理系统, ...

  3. Javaweb基础知识复习------AJAX

    AJAX相关知识复习 简而言之,就是可以用AJAX+HTML代替JSP页面,也可以进行异步交互,更新部分界面 Ajax案例 后端代码就是一个servlet文件,前端页面的代码也不是很常用,可以在下面这 ...

  4. P4555 [国家集训队]最长双回文串 回文树(回文自动机)简单题

    贴个题目链接:https://www.luogu.org/problem/P4555 题目:输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(∣X∣,∣Y∣≥1)且X和Y都是回文 ...

  5. 「学习笔记」平衡树基础:Splay 和 Treap

    「学习笔记」平衡树基础:Splay 和 Treap 点击查看目录 目录 「学习笔记」平衡树基础:Splay 和 Treap 知识点 平衡树概述 Splay 旋转操作 Splay 操作 插入 \(x\) ...

  6. 页面div垂直内容超出后,edge浏览器右侧没有自动出现滚动条

    搜索网上解决办法,是给父元素添加样式 overflow-y:scroll; height:100vh; 但此举只是给该父元素侧边添加滚动条,而且不好配合回到顶部这一效果 最后发现是在父组件的包裹元素中 ...

  7. 【译】使用 ChatGPT 和 Azure Cosmos DB 构建智能应用程序

    原文 | Mark Brown 翻译 | 郑子铭 随着对智能应用程序的需求不断增长,开发人员越来越多地转向人工智能(AI)和机器学习(ML),以增强其应用程序的功能.聊天机器人已经成为提供对话式人工智 ...

  8. Mybatis 获取自增主键 useGeneratedKeys与keyProperty解答

    Mybatis 获取自增主键 31bafebb-a95b-4c35-a949-8bc335ec6e2e 今天开发的时候遇到一个疑惑,业务场景是这样的, 但是百度好久没有找到合适的解答,于是自己向同事了 ...

  9. OpenWRT实现NAT64/DNS64

    OpenWRT实现NAT64/DNS64 连接到核心路由器 # 连接到核心路由器 [C:\~]$ ssh root@10.0.0.1 Connecting to 10.0.0.1:22... Conn ...

  10. python之算术运算符复习

    运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被重复若干次的字符 ...