[笔记] 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
,hallo
和hxllo
h*llo
匹配hllo
和heeeello
h[ae]llo
匹配hello
和hallo,
但不能匹配hillo
h[^e]llo
匹配hallo
,hbllo
, ... 但不能匹配hello
h[a-b]llo
匹配hallo
和hbllo
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
设置指定key
的value
。
语法:SET key value
尽管20
看起来是数值类型,但是在redis中会将其视为string类型。不过有相关的操作可以用于处理这种可以转换为数字的string数据。
GET
获取指定key
的value
。
语法: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列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表的相关指令围绕几个关键字展开:B,L或R,PUSH或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
从LPOP和RPOP可以看出这两个指令分别从列表的左边或右边弹出元素,区别在于其前缀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
start
和end
是“偏移量”,0 表示第一个元素,支持负数,-1 表示倒数第一个。
start
和end
组成的区间是闭区间。
使用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]
这里的start
和stop
并不是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)
[3] Redis指令HSET和HMSET有什么区别_hmset和hset_Clear_rain的博客-CSDN博客
[4] Redis基本操作命令(图文详解)_redis 命令_进击小高的博客-CSDN博客
热门相关:倾心之恋:总裁的妻子 神算大小姐 戏精老公今天作死没 修真界败类 万古至尊