[笔记] Redis 基本操作

redis基本操作

🎈 本文为学习redis的个人笔记,内容较基础,所引用的文章或网站链接在文末给出。

redis简介

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset (sortded set),hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

使用环境

  • WSL2
  • Ubuntu 22.04.2 LTS

启动方式

启动服务

redis-server

  • redis-server命令使用默认配置启动 redis;

  • redis-server命令后面可以写配置文件的命令,从而实现自定义配置启动 redis;

如:

redis-server /etc/redis.conf

启动redis-cli

redis-cli

使用-p 7777可以指定连接的端口,我的配置文件里指定的端口号是7777,所以需要使用redis-cli -p 7777启动。

  • 使用ping命令测试是否连接成功,如果连接成功,会返回PONG
  • 如果配置文件中设置了密码,则需要使用AUTH [密码]指令,否则无法继续。

通用指令

redis的大部分指令和数据类型有关,但也有一些比较基础的指令是通用的。

KEYS

查询与pattern匹配的 keys。

语法:KEYS [pattern]

支持的pattern格式:

  • h?llo 匹配 hello, hallohxllo
  • h*llo 匹配 hlloheeeello
  • h[ae]llo 匹配 hellohallo, 但不能匹配 hillo
  • h[^e]llo 匹配 hallo, hbllo, ... 但不能匹配 hello
  • h[a-b]llo 匹配 hallohbllo

DEL

删除指定的 key,支持一次性删除多个。

语法:DEL key [key ...]

TTL

查询一个 key 的剩余有效时间(单位:秒)。

语法:TTL key

返回值:

  • 已过期:-2
  • 永久有效:-1
  • 仍有效:>=0

数据类型

redis最基础的5种数据类型:

  • string:字符串
  • hash:哈希
  • list:列表
  • set:集合
  • zset:有序集合(sorted set

下面开始讨论不同的数据类型的相关指令

通过输入help @<group>可以获得该数据类型的相关操作指令:

# 可以通过这5个指令获取指定数据类型的相关指令介绍
help @string
help @hash
help @list
help @set
help @sorted-set

string 字符串

string字符串类型是redis里最简单的数据类型,常用的指令如下:

SET

设置指定keyvalue

语法:SET key value

尽管20看起来是数值类型,但是在redis中会将其视为string类型。不过有相关的操作可以用于处理这种可以转换为数字的string数据。

GET

获取指定keyvalue

语法:GET key

MSET和MGET

批量设置和获取多个值。

语法:

  • MSET key value [key value]

  • MGET key [key]

INCR

increase:指定的key的数值加一,前提是指定的key的value可以转换为数值。

语法:INCR key

操作成功之后,会返回更新后的值。

INCRBY

increase by:与INCR类似,但是可以指定增加的数值,可以传入负值从而实现减法。

语法:INCRBY KEY INCREAMENT

DECR

decrease:INCR的相反操作,但其实可以通过INCRBY-1实现,所以DECR比较少用到。

语法:DECR key

SETEX

set expire:设置一个值,同时设置其有效时间(以秒为单位),有效时间结束后,这个值将失效。

必要性:由于redis是工作于内存的,如果大量的键值对一直存在,会占用大量的内存空间,设置有效时间可以适当地腾出内存空间。

语法:SETEX key seconds value

当键值对过期后,再次执行GET,将得到(nil).

nil在redis中表示该key不存在。


hash 哈希值

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

类似于string类型,最基础的指令是 set 和 get 指令,hash相应的指令在前面有一个h前缀表示hash。

HSET和HMSET

从指令中可以看出这两个指令的区别是M即 multiple,HMSET可以同时设置一个hash的多个字段。

在redis较新的版本中,HSET也支持同时设置多个字段了,HMSET已弃用。

语法:HSET key field value [field value ...]

如果要表示如下的一个对象:

person = {
    name: "nicholas",
    age: "20"
}

可以用指令:

hset person name nicholas age 20

HGET

获取指定key ( hash类型 ) 的指定字段的值。

语法:HGET key field

HKEYS

获取一个哈希表中的所有字段

语法:HKEYS key

HVALS

获取一个哈希表中的所有值

语法:HVALS key


list 列表

Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。

列表的相关指令围绕几个关键字展开:BL或RPUSH或POP.

B表示 block,即阻塞。

L或R指 left 或 right,指从列表的左边或右边进行操作。

PUSH或POP是推入或弹出,是list新增或删减元素的操作。

LPUSH

从列表左边推入一个新元素。

语法:LPUSH key element

支持推入多个新元素。

语法:LPUSH key element [element]

需要注意的是,推入的顺序是 element1, element2, element3, ......

而又是从左边依次推入的,因此,会得到如下结果:

LRANGE指令在下文介绍。

  • 推入的顺序是:1、2、3;

  • 得到的结果是:3、2、1.

RPUSH

从列表右边推入新元素。

语法:RPUSH key element [element]

LPOP

从列表左边弹出指定数量的元素。

语法:LPOP key [count]

  • [count]参数可选,弹出指定数量的元素,缺省值为1.

RPOP

从列表右边弹出指定数量的元素。

语法:RPOP key [count]

BLPOP和BRPOP

LPOPRPOP可以看出这两个指令分别从列表的左边或右边弹出元素,区别在于其前缀B,表示 block 阻塞。

  • 如果列表中有元素,则会直接弹出元素;

  • 如果列表中没有元素,则会阻塞,直到有新元素进入列表,再执行弹出操作。

( 或许你有在操作系统课程中学到关于“生产者 消费者”的相关知识 )

语法:

  • BLPOP key timeout

  • BRPOP key timeout

timeout是阻塞的最大时间,单位为 秒,超出该时间将不再等待。

如图,(这里提前将list清空了),执行blpop list 30,阻塞。

等待 30s 之后,仍没有新元素,返回(nil).

模拟两个用户

A:阻塞

B:新增元素

A:拿到元素

list除了上述的push/pop的增删操作,还有更改元素和查询元素的操作。

LRANGE

查询指定区间之内的元素。

语法:LRANGE key start end

startend是“偏移量”,0 表示第一个元素,支持负数,-1 表示倒数第一个。

startend组成的区间是闭区间。

使用LRANGE key 0 -1即可获取列表的所有元素。

LINDEX

根据index获取列表中指定位置的元素。

语法:LINDEX key index

LSET

编辑列表中指定位置的元素。

语法:LSET key index element

LLEN

获取列表的长度。

语法:LLEN key


set 集合

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

关于一个集合的操作

SADD

向集合中添加若干个成员。

语法:SADD key member [member ...]

SCARD

获取集合的成员数量。

语法:SCARD key

SMEMBERS

获取集合的所有成员。

语法:SMEMBERS key

SISMEMBER

set-is-member:用于查询一个值是否是集合的成员之一。

语法:SISMEMBER key member

  • 返回 1 表示存在。
  • 返回 0 表示不存在。

SREM

set-remove:用于移除若干成员。

语法:SREM key member [member ...]

SRANDMEMBER

set-random-member:随机获取指定数量的集合成员。

语法:SRADNMEMBER key [count]

  • [count]参数可选,缺省值为1.

SPOP

set-pop:随机弹出指定数量的集合成员。

语法:SPOP key [count]

关于多个集合的操作

SINTER

若干个集合的交集。

语法:SINTER key [key ...]

上述例子中:

1 2 3 4 5

-5 -3 -1 1 3 5

的交集为:

1 3 5

SUNION

若干个集合的并集。

语法:SUNION key [key ...]


sorted-set 有序集合

有序集合的每一个成员都会携带一个double类型的score用于排序。

对于集合中的成员,score是可以相同的,但是member即成员不能相同。

ZADD

添加成员,先写score再写member,可以写多组。

语法:ZADD key score1 member1 [score2 member2 ...]

ZCARD

获取集合的成员数量。

语法:ZCARD key

ZCOUNT

计算在有序集合中指定区间分数的成员数。

语法:ZCOUNT key min max

区间[min, max]是闭区间。

ZINCRBY

对指定成员的score加上增量increment.

语法:ZINCRBY key increment member

返回增加成功后的score.

ZRANGE

通过索引区间返回有序集合指定区间内的成员。

语法:ZRANGE key start stop [WITHSCORES]

这里的startstop并不是score的区间,而是该有序集合排序之后的index区间。

ZRANGEBYSCORE

通过分数返回有序集合指定区间内的成员。

语法:ZRANGEBYSCORE key min max

ZRANK

返回指定成员的索引。

语法:ZRANK key member

ZREM

移除一个或多个成员。

语法:ZREM key member [member ...]


Redis可视化软件

图形化界面可以更直观地观察redis里的数据,这里推荐的是Another Redis Desktop Manage.

基本使用方法

创建连接

新建键值对

查看数据

双击左边的key列表,即可在右边查看具体的值。

界面设置

界面左上角有一个设置按钮,点击之后可以进行light/dark模式的切换、界面缩放、字体等配置。


引用

[1] Redis 教程 | 菜鸟教程 (runoob.com)

[2] Redis data types | Redis

[3] Redis指令HSET和HMSET有什么区别_hmset和hset_Clear_rain的博客-CSDN博客

[4] Redis基本操作命令(图文详解)_redis 命令_进击小高的博客-CSDN博客

热门相关:倾心之恋:总裁的妻子   神算大小姐   戏精老公今天作死没   修真界败类   万古至尊