编辑
2024-04-03
DBNotes
00

目录

Redis 介绍
基本操作 & 字符串(String)
设置数据(键值对)
Redis中的数据是以键值对的方式进行存储的
Redis中的键是区分大小写的
Redis 中默认使用字符串来存储数据, 二进制安全的, 因此可以存储许多不同类型的数据
删除键
使用EXISTS命令判断此键是否存在
使用KEYS命令判断存在哪些键
使用FLUSHALL删除所有的键
由于Redis是以二进制的方式存储数据, 所以对中文的支持有缺陷(乱码)
Redis客户端添加 --raw 参数, 以解决Redis中文乱码的情况
使用clear命令清空屏幕
键值对的过期时间
使用TTL(Time to live)命令查看键值对的过期时间
使用EXPIRE命令设置键值对的过期时间
使用SETEX命令设置一个带过期时间的键值对
SETNX命令, 只有当键不存在时才设置键的值
列表(List)
列表介绍
列表操作
添加和获取列表元素
添加顺序
删除列表的元素(LPOP、RPOP)
删除多个元素
查看列表的长度(LLEN)
使用LTRIM命令删除指定元素以外的元素
集合(Set)
集合介绍
集合操作
添加元素(SADD)
不能添加重复的元素
使用SISMEMBER命令判断元素是否在集合中
删除集合中的元素(SREM)
有序集合(SortedSet)
有序集合(SortedSet)介绍
有序集合操作
添加元素
查看有序集合中的元素
ZRANGE 加上 WITHSCORES 会显示分数
单独查看元素分数(ZSCORE)
查看元素排名(ZRANK ZREVRAK)
哈希(Hash)
哈希(Hash)介绍
哈希(Hash)操作
添加键值对(HSET)
获取哈希(Hash)键值对(HGET)
删除键值对(HDEL)
判断键值对是否存在(HEXISTS)
Redis订阅模式
订阅模式操作(PUBLISH SUBSCRIBE)
订阅模式特性
局限性
消息队列(Stream)
消息队列介绍
消息队列操作
添加消息(XADD)
查看Stream流中的内容(XRANGE)
删除消息(XDEL XTRIM)
修剪流(消息)(XTRIM)
手动添加并读取消息
获取最新的消息
消费者组
消费者组操作
创建消费者组
查看消费者组
添加消费者
地理空间(Geospatia)
地理空间(Geospatia)介绍
地理空间(Geospatia)相关操作
添加地理位置(GEOADD)
获取位置信息(GEOPOS)
计算距离(GEODIST)
搜索位置(GEORADIUSBYMEMBER)

Redis 介绍

image.png

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

基本操作 & 字符串(String)

设置数据(键值对)

Redis中的数据是以键值对的方式进行存储的

powershell
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

例: 设置一个键值对

powershell
127.0.0.1:6379> SET name gyc OK 127.0.0.1:6379> GET name "gyc"

Redis中的键是区分大小写的

powershell
127.0.0.1:6379> SET Name GYC OK 127.0.0.1:6379> GET Name "GYC"

Redis 中默认使用字符串来存储数据, 二进制安全的, 因此可以存储许多不同类型的数据

powershell
127.0.0.1:6379> SET age 18 OK 127.0.0.1:6379> GET age "18"

删除键

powershell
127.0.0.1:6379> DEL name (integer) 1 127.0.0.1:6379> get name (nil)
  • 返回为nuil则表示此键已经被删除掉

使用EXISTS命令判断此键是否存在

powershell
127.0.0.1:6379> EXISTS name (integer) 0
  • 返回值为0则表示此键不存在
powershell
127.0.0.1:6379> EXISTS age (integer) 1
  • 返回值为1则表示此键存在

使用KEYS命令判断存在哪些键

    • 查找所有的键
powershell
127.0.0.1:6379> KEYS * 1) "age" 2) "Name"
  • *me 查找所有以me结尾的键
powershell
127.0.0.1:6379> KEYS *me 1) "Name"

使用FLUSHALL删除所有的键

powershell
127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> KEYS * (empty list or set)

由于Redis是以二进制的方式存储数据, 所以对中文的支持有缺陷(乱码)

powershell
127.0.0.1:6379> set name ᄌ￟ᅯᄡᄈ￉ OK 127.0.0.1:6379> GET name "\xb8\xdf\xd4\xb4\xb3\xc9"
  • 以二进制方式显示

Redis客户端添加 --raw 参数, 以解决Redis中文乱码的情况

powershell
127.0.0.1:6379> quit PS C:\Users\30372> redis-cli.exe --raw 127.0.0.1:6379> GET name 高源成
  • --raw 参数表示以原始的方式显示

使用clear命令清空屏幕

powershell
127.0.0.1:6379> clear

键值对的过期时间

使用TTL(Time to live)命令查看键值对的过期时间

powershell
127.0.0.1:6379> TTL name -1
  • 返回-1表示没有设置过期时间

使用EXPIRE命令设置键值对的过期时间

powershell
127.0.0.1:6379> EXPIRE name 10 1 127.0.0.1:6379> TTl name 3 127.0.0.1:6379> TTl name 2 127.0.0.1:6379> TTl name 0 127.0.0.1:6379> TTl name -2 127.0.0.1:6379> GET name
  • 当返回值为-2时表示当前键值对过期

使用SETEX命令设置一个带过期时间的键值对

powershell
127.0.0.1:6379> SETEX name 10 gyc OK 127.0.0.1:6379> GET name gyc 127.0.0.1:6379> TTl name 6 127.0.0.1:6379> TTl name 5 127.0.0.1:6379> TTl name 4 127.0.0.1:6379> TTl name 1 127.0.0.1:6379> TTl name -2

SETNX命令, 只有当键不存在时才设置键的值

powershell
127.0.0.1:6379> SETNX Name Gyc 1 127.0.0.1:6379> GET Name Gyc 127.0.0.1:6379> SETNX Name gyc 0
  • 返回值为1则表示键不存在,成功设置值
  • 返回值为0则表示键存在,不进行任何设置操作

列表(List)

列表介绍

列表(List),一般用来存储一组有顺序的数据, 与数组的概念有些相似, 常用LPUSHRPUSH命令将元素添加到头部或者尾部.

列表操作

添加和获取列表元素

添加元素

powershell
127.0.0.1:6379> LPUSH letter a (integer) 1

获取元素

powershell
127.0.0.1:6379> LRANGE letter 0 -1 1) "a"
  • 使用LRANGE命令获取元素
  • 0 -1 指定元素的位置, 0 为默认起始位置, -1 为最后一个元素位置

添加顺序

powershell
127.0.0.1:6379> LRANGE letter 0 -1 1) "a" 127.0.0.1:6379> LPUSH letter b (integer) 2 127.0.0.1:6379> LRANGE letter 0 -1 1) "b" 2) "a" 127.0.0.1:6379> LPUSH letter c d e (integer) 5 127.0.0.1:6379> LRANGE letter 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a"
  • LPUST 会安照从左相右的顺序添加, 因此最后添加的元素就会排在最前面

image.png

powershell
127.0.0.1:6379> RPUSH letter f (integer) 7 127.0.0.1:6379> LRANGE letter 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 6) "f"
  • RPUST 会安照从右向左的顺序添加, 元素就会排在最后面

image.png

删除列表的元素(LPOP、RPOP)

使用LPOPRPOP来删除列表的元素

image.png

powershell
127.0.0.1:6379> RPOP letter "f" 127.0.0.1:6379> LRANGE letter 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a"

删除多个元素

  • 对于 Redis 6.2 及以上版本,可以使用 LPOP 的可选参数 count 来弹出多个元素
powershell
127.0.0.1:6379> LPOP letter 2 127.0.0.1:6379> LRANGE letter 0 -1 1) "c" 2) "b" 3) "a"

查看列表的长度(LLEN)

powershell
127.0.0.1:6379> LLEN letter (integer) 3

使用LTRIM命令删除指定元素以外的元素

powershell
127.0.0.1:6379> flushall OK 127.0.0.1:6379> lpush letter a b c d e (integer) 5 127.0.0.1:6379> LRANGE letter 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 127.0.0.1:6379> LTRIM letter 1 3 OK 127.0.0.1:6379> LRANGE letter 0 -1 1) "d" 2) "c" 3) "b"
  • 删除索引范围不在1和3之间的元素, 即ea

集合(Set)

集合介绍

集合(set) 是一种无序集合, 和列表的区别在于列表的元素可以重复, 而集合(set)中元素是不能重复的
set中的相关命令都是以S开头

集合操作

添加元素(SADD)

powershell
127.0.0.1:6379> SADD course Redis (integer) 1 127.0.0.1:6379> SMEMBERS course 1) "Redis"
  • SADD 集合名称 添加元素
  • 使用SMEMBERS命令查看集合中的元素

不能添加重复的元素

powershell
127.0.0.1:6379> SADD course Redis (integer) 0 127.0.0.1:6379> SMEMBERS course 1) "Redis"
  • 返回值为0 添加失败

使用SISMEMBER命令判断元素是否在集合中

powershell
127.0.0.1:6379> SISMEMBER course Redis (integer) 1 127.0.0.1:6379> SISMEMBER course Python (integer) 0
  • 返回值为1表示元素在集合中
  • 返回值为0表示元素不在集合中

删除集合中的元素(SREM)

powershell
127.0.0.1:6379> SREM course Redis (integer) 1 127.0.0.1:6379> SMEMBERS course (empty list or set)

有序集合(SortedSet)

有序集合(SortedSet)介绍

有序集合(SortedSet)/ (ZSet), 与集合的区别为ZSet的每个元素会关联一个浮点类型的分数, 后会按照分数对集合中的元素按照从小到大的顺序进行排序
有序集合的成员都是唯一的, 但是分数是可以重复的
有序集合的命令都是以Z开头的

image.png

有序集合操作

添加元素

powershell
127.0.0.1:6379> ZADD result 680 A 660 B 650 C 640 D (integer) 4
  • ZADD 有序集合的名字 分数 元素(成员)

查看有序集合中的元素

powershell
127.0.0.1:6379> ZRANGE result 0 -1 1) "D" 2) "C" 3) "B" 4) "A"
  • ZRANGE 有序集合名字 起始位置 结束位置

ZRANGE 加上 WITHSCORES 会显示分数

powershell
127.0.0.1:6379> ZRANGE result 0 -1 WITHSCORES 1) "D" 2) "640" 3) "C" 4) "650" 5) "B" 6) "660" 7) "A" 8) "680"

单独查看元素分数(ZSCORE)

powershell
127.0.0.1:6379> ZSCORE result A "680"
  • ZSCORE 有序集合名字 查询元素名字

查看元素排名(ZRANK ZREVRAK)

powershell
127.0.0.1:6379> ZRANK result A (integer) 3
  • 从大到小排名
powershell
127.0.0.1:6379> ZREVRANK result A (integer) 0
  • 从大到小

哈希(Hash)

哈希(Hash)介绍

哈希(Hash)是一个字符类型的字段和值的映射表, 键值对的集合, 常用来存储对象
哈希相关命令常以H开头

哈希(Hash)操作

添加键值对(HSET)

powershell
127.0.0.1:6379> HSET person name gyc (integer) 1 127.0.0.1:6379> HSET person age 18 (integer) 1

获取哈希(Hash)键值对(HGET)

powershell
127.0.0.1:6379> HGET person name "gyc" 127.0.0.1:6379> HGET person age "18" 127.0.0.1:6379> HGETALL person 1) "name" 2) "gyc" 3) "age" 4) "18"

删除键值对(HDEL)

powershell
127.0.0.1:6379> HDEL person age (integer) 1 127.0.0.1:6379> HGET person age (nil) 127.0.0.1:6379> HGETALL person 1) "name" 2) "gyc"

判断键值对是否存在(HEXISTS)

powershell
127.0.0.1:6379> HEXISTS person age (integer) 0 127.0.0.1:6379> HEXISTS person name (integer) 1
  • 返回1 表示存在
  • 返回0 表示不存在

Redis订阅模式

订阅模式操作(PUBLISH SUBSCRIBE)

powershell
127.0.0.1:6379> PUBLISH gyc "Hi Redis" (integer) 1
  • 创建频道并发布内容
  • PUBLISH 频道名称 发布消息内容
powershell
127.0.0.1:6379> SUBSCRIBE gyc Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "gyc" 3) (integer) 1 1) "message" 2) "gyc" 3) "Hi Redis"
  • 订阅并接收频道信息
  • SUBSCRIBE 频道名称

订阅模式特性

可以有多个订阅频道(终端)

局限性

消息无法持久化
无法记录历史消息 等

消息队列(Stream)

消息队列介绍

消息队列(Stream)是redis5.0后, 引入的新的数据结构, 是一种轻量型的消息队列, 用来解决发布模式的一些局限性
消息队列(Stream)的命令都以X开头

消息队列操作

添加消息(XADD)

powershell
127.0.0.1:6379> XADD gyc * course Redis "1721541334092-0" 127.0.0.1:6379> XADD gyc * course git "1721541339773-0" 127.0.0.1:6379> XADD gyc * course Docker "1721541342874-0"
  • XADD 流的名称(频道名称) 消息ID 字段名 字段的值
  • * 代表自动生成条目ID

查看Stream流中的内容(XRANGE)

powershell
127.0.0.1:6379> XRANGE gyc - + 1) 1) "1721541334092-0" 2) 1) "course" 2) "Redis" 2) 1) "1721541339773-0" 2) 1) "course" 2) "git" 3) 1) "1721541342874-0" 2) 1) "course" 2) "Docker"
  • XRANGE 流的名称(频道名称) start end
  • -+代表所有消息
powershell
127.0.0.1:6379> XRANGE gyc 1721541334092-0 1721541334092-0 1) 1) "1721541334092-0" 2) 1) "course" 2) "Redis"
  • 代表只查看特定范围内的消息 -XRANGE 流的名称(频道名称) ID范围

删除消息(XDEL XTRIM)

powershell
127.0.0.1:6379> XDEL gyc 1721541339773-0 (integer) 1 127.0.0.1:6379> XRANGE gyc - + 1) 1) "1721541334092-0" 2) 1) "course" 2) "Redis" 2) 1) "1721541342874-0" 2) 1) "course" 2) "Docker"
  • XDEL 流的名称(频道名称) 要删除的ID

修剪流(消息)(XTRIM)

powershell
127.0.0.1:6379> XTRIM gyc MAXLEN 0 (integer) 2 127.0.0.1:6379> XRANGE gyc - + (empty list or set)
  • XTRIM 流的名称 设置的最大条目数
  • 0 表示将流的最大长度设置为 0。这意味着会删除所有条目,因为长度 0 不允许有任何条目。

手动添加并读取消息

powershell
127.0.0.1:6379> XADD student 100-1 course Redis "100-1" 127.0.0.1:6379> XADD student 100-2 course git "100-2" 127.0.0.1:6379> XADD student 100-3 course python "100-3" 127.0.0.1:6379> XREAD COUNT 2 BLOCK 1000 STREAMS student 0 1) 1) "student" 2) 1) 1) "100-1" 2) 1) "course" 2) "Redis" 2) 1) "100-2" 2) 1) "course" 2) "git"
  • XREAD 指定最大读取消息条数 指定阻塞时间(ms) STREAMS 流的名称 起始ID
  • COUNT 2
    • COUNT 指定一次读取的最大条目数。
    • 2 是读取的条目数量上限。此命令会读取最多 2 个条目。
  • BLOCK 1000
    • BLOCK 指定阻塞读取的最大时间,单位为毫秒。
    • 1000 是阻塞时间上限,表示如果流中暂时没有新消息,命令会等待最多 1000 毫秒(即 1 秒)以查看是否有新消息可读取。
  • STREAMS
    • STREAMS 后面跟着要读取的流名称及其对应的起始 ID。
  • student
    • student 是流的名称,即你要读取数据的流。
  • 0
    • 0 是起始 ID,表示从流的开头开始读取。
powershell
127.0.0.1:6379> XREAD COUNT 2 BLOCK 1000 STREAMS student 100-1 1) 1) "student" 2) 1) 1) "100-2" 2) 1) "course" 2) "git" 2) 1) "100-3" 2) 1) "course" 2) "python" 127.0.0.1:6379> XREAD COUNT 2 BLOCK 1000 STREAMS student 100-2 1) 1) "student" 2) 1) 1) "100-3" 2) 1) "course" 2) "python" 127.0.0.1:6379> XREAD COUNT 2 BLOCK 1000 STREAMS student 100-3 (nil) (1.09s)
  • 100-1 由于ID是从100-0开始的, 因此只读到了后两条消息
  • 当起始ID不存在时会阻塞1s并返回nil

获取最新的消息

powershell
127.0.0.1:6379> XADD student 100-6 course Lua "100-6" 127.0.0.1:6379> XREAD COUNT 2 BLOCK 10000 STREAMS student $ 1) 1) "student" 2) 1) 1) "100-6" 2) 1) "course" 2) "Lua" (7.05s)
  • $ 表示从最新的消息开始读取。即只会读取在命令执行之后新添加的消息。

消费者组

消费者组操作

创建消费者组

powershell
127.0.0.1:6379> XGROUP CREATE student group1 0 OK
  • XGROUP CREATE 消息名称 组名 ID

查看消费者组

powershell
127.0.0.1:6379> XINFO GROUPS student 1) 1) "name" 2) "group1" 3) "consumers" 4) (integer) 0 5) "pending" 6) (integer) 0 7) "last-delivered-id" 8) "0-0"

添加消费者

CREATECONSUMER 命令式Redis 6.2.0 后出现的命令

地理空间(Geospatia)

地理空间(Geospatia)介绍

地理空间(Geospatia)是Redis 3.2 版本中的新特性, 提供一种用于存取地理位置信息的数据结构, 同时支持对地理位置进行各种计算操作(例如计算两地间的距离、获取经纬度、查找附近的人等)
地理位置相关命令都以 GEO 开头

地理空间(Geospatia)相关操作

添加地理位置(GEOADD)

powershell
127.0.0.1:6379> GEOADD city 116.405285 39.904989 beijing (integer) 1
  • GEOADD key的名称 经度 纬度 城市名称(值的名称)
powershell
127.0.0.1:6379> GEOADD city 121.472644 31.231706 shanghai 114.085947 22.547 shenzhen 37 23.125178 guangzhou 120.153576 30.287459 hangzhou (integer) 4
  • 添加多个信息
  • 添加几条, 返回几条

获取位置信息(GEOPOS)

powershell
127.0.0.1:6379> GEOPOS city beijing 1) 1) "116.40528291463851929" 2) "39.9049884229125027"

计算距离(GEODIST)

powershell
127.0.0.1:6379> GEODIST city beijing shanghai "1067597.9668"
  • 默认单位是米
powershell
127.0.0.1:6379> GEODIST city beijing shanghai km "1067.5980"
  • 后可跟单位

搜索位置(GEORADIUSBYMEMBER)

powershell
127.0.0.1:6379> GEORADIUSBYMEMBER city shanghai 2000 km 1) "shenzhen" 2) "hangzhou" 3) "shanghai" 4) "beijing"
  • 以指定范围为圆心, 指定距离为半径搜索

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!