Redis

本文最后更新于:2025年4月29日 下午

安装

windows:

Releases · tporadowski/redis (github.com)

点击安装Redis-x64-5.0.14.1.msi

通用命令:

  • 查看所有键

    keys命令可用于查看所有键,语法如下

    keys pattern

    说明:pattern 用于匹配 key,其中*表示任意个任意字符,?表示一个任意字符。

    示例:

    127.0.0.1:6379> KEYS *
    1) "k3"
    2) "k2"
    3) "k1"

    注意:该命令会遍历 Redis 服务器中保存的所有键,因此当键很多时会影响整个 Redis 服务的性能,线上环境需要谨慎使用。

  • 键总数

    dbsize可用于查看键的总数,语法如下

    dbsize
  • 判断键是否存在

    exists命令可用于判断一个键是否存在,语法如下

    exists key

    说明:若键存在则返回 1,不存在则返回 0。

  • 删除键

    del可用于删除指定键,语法如下

    del key [key ...]

    说明:返回值为删除键的个数,若删除一个不存在的键,则返回 0。

  • 查询键的剩余过期时间

    ttl key

    说明ttl的含义为time to live,用于查询一个定时键的剩余存活时间,返回值以秒为单位。若查询的键的未设置过期时间,则返回-1,若查询的键不存在,则返回-2

  • 数据库管理命令

    Redis 默认有编号为 0~15 的 16 个逻辑数据库,每个数据库之间的数据是相互独立的,所有连接默认使用的都是 0 号数据库。

    • 切换数据库

      select命令可用于切换数据库,语法如下

      select index

      说明:若 index 超出范围,会报错

    • 清空数据库

      flushdb命令会清空当前所选用的数据库,flushall命令会清空 0~15 号所有的数据库。

      注意:生产环境慎用

常用数据类型

string 类型

概述:Redis 中的 string 类型保存的是字节序列(Sequence of bytes),因此任意类型的数据,只要经过序列化之后都可以保存到 Redis 的 string 类型中,包括文本、数字甚至是一个对象。

set

set命令用于添加 string 类型的键值对,具体语法如下:

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

各选项含义:

  • EX seconds:设置过期时间,单位为秒

  • PX milliseconds:设置过期时间,单位为毫秒

  • NX:仅在 key 不存在时 set

  • XX:仅在 key 存在时 set

例如:set k2 v2 ex 20:设置 key 为 k2,value 为 v2,20s 后过期

get

get命令用于获取某个 string 类型的键对应的值,具体如下:

get key

incr

incr命令用于对数值做自增操作,具体语法如下

incr key

若 key 对应的 value 是整数,则返回自增后的结果,若不是整数则报错,若 key 不存在则创建并返回 1

decr

decr命令用于对数值做自减操作,具体语法如下

decr key

应用场景

string 类型常用于缓存、计数器等场景。

list 类型

概述:

list 类型可用于存储多个 string 类型的元素,并且所有元素按照被添加的顺序存储。

常用命令

list 类型相关的命令较多,下面分类进行进行介绍。

添加元素

向列表中添加元素的命令有lpushrpushlinsert,各命令的功能与用法如下

image-20240808215505935

lpush:该命令用于向 list 左侧添加元素,语法如下

lpush key value [value ...]

示例:

lpush l1 a b c

rpush:该命令用于向 list 右侧添加元素,语法如下

rpush key value [value ...]

linsert:该命令用于向 list 指定位置添加元素,语法如下

linsert key BEFORE|AFTER pivot value

示例:在 li 的 list 列表中,在 b 后新增一个 value 为 new

linsert l1 after b new

查询元素

查询 list 元素的命令有lindexlrange,各命令的功能与用法如下

lindex:该命令用于获取指定索引位置的元素,语法如下

lindex key index

说明:index 从左到右依次是 0,1,2…,从右到左依次是-1,-2,-3…

lrange:该命令用于获取指定范围内的元素列表,语法如下

lrange key start stop

示例:获取 list 全部元素,命令如下

lrange l1 0 -1

删除元素

删除 list 元素的命令有lpoprpoplrem,各命令的功能与用法如下

image-20240808220734141

lpop:该命令用于移除并返回 list 左侧元素,语法如下

lpop key [count]

说明:count 参数表示移除元素的个数

rpop:该命令用于移除并返回 list 右侧的元素,语法如下

rpop key [count]

lrem:该命令用于移除 list 中的指定元素,语法如下

lrem key count value

说明:count 参数表示要移除 element 元素的个数(list 中可以存在多个相同的元素),count 的用法如下

  • 若 count>0,则从左到右删除最多 count 个 element 元素
  • 若 count<0,则从右到左删除最多 count(的绝对值)个 element 元素
  • 若 count=0,则删除所有的 element 元素

修改元素

lset:命令可用于修改指定索引位置的元素,语法如下

lset key index value

其他

llen命令可用于查看 list 长度,语法如下

llen key

应用场景

  • 社交应用中,可使用 list 缓存每个用户发布的最新的 N 条记录。
  • list 可用作异步消息队列。

set 类型

概述:和 list 类型相似,set 类型也可用来存储多个 string 类型的元素,但与 list 类型不同,set 中的元素是无序的,且 set 中不会包含相同元素。

集合内

sadd:该命令用于向 set 中添加元素,语法如下

sadd key member [member ...]

smembers:该命令用于查询 set 中的全部元素,语法如下

smembers key

srem:该命令用于移除 set 中的指定元素,语法如下

srem key member [member ...]

spop:该命令随机移除并返回 set 中的 n 个元素,语法如下

spop key [count]

srandmember:该命令随机返回 set 中的 n 个元素(不删除),语法如下

srandmember key [count]

scard:该命令用于查询 set 中的元素个数,语法如下

scard key

sismember:该命令用于元素是否在 set 中,语法如下

sismember key member

集合间

sinter:该命令用于计算多个集合的交集,语法如下

sinter key [key ...]

sunion:该命令用于计算多个集合的并集,语法如下

sunion key [key ...]

sdiff:该命令用于计算多个集合的差集,语法如下

sdiff key [key ...]

应用场景

set 可用于计算共同关注好友,随机抽奖系统等等。

Hash 类型

概述:hash 类型类似于 Java 语言中的HashMap,可用于存储键值对。

hset:该命令用于向 hash 中增加键值对,语法如下

hset key field value [field value ...]

hget:该命令用于获取 hash 中某个键对应的值,语法如下

hget key field

hdel:该命令用于删除 hash 中的指定的键值对,语法如下

hdel key field [field ...]

hlen:该命令用于查询 hash 中的键值对个数,语法如下

hlen key

hexists:该命令用于判断 hash 中的某个键是否存在,语法如下

hexists key field

hkeys:该命令用于返回 hash 中所有的键,语法如下

hkeys key

hvals:该命令用于返回 hash 中所有的值,语法如下

hvals key

hgetall:该命令用于返回 hash 中所有的键与值,语法如下

hgetall key

应用场景

hash 类型可用于缓存对象等。

zet 类型

概述:zset(sorted set)被称为有序集合,同 set 相似,zset 中也不会包含相同元素,但不同的是,zset 中的元素是有序的。并且 zset 中的元素并非像 list 一样按照元素的插入顺序排序,而是按照每个元素的分数(score)排序。

zadd:该命令用于向 zset 中添加元素,语法如下

zadd key [NX|XX] [CH] [INCR] score member [score member ...]

**说明***:

  • NX:仅当 member 不存在时才 add
  • XX:仅当 member 存在时才 add
  • CH:返回此次操作后有序集合元素发生变化的数量
  • INCR:如果 member 存在,其分数会在原分数的基础上增加指定的增量值;如果成员不存在,则会添加该成员,并将其分数设置为增量值。

zcard:该命令用于计算 zset 中的元素个数,语法如下

zcard key

zscore:用于查看某个元素的分数,语法如下

zscore key member

zrank/zrevrank:这组命令用于计算元素的排名,其中 zrank 按照 score 的升序排序,zrevrank 则按照降序排序,语法如下

zrank/zrevrank key member

说明:名次从 0 开始。

zrem:该命令用于删除元素,语法如下

zrem key member [member ...]

zincrby:该命令用于增加元素的分数,语法如下

zincrby key increment member

zrange:该命令用于查询指定区间范围的元素,语法如下

zrange key start stop [byscore] [rev] [limit offset count] [withscores]

说明

  • start/stop:用于指定查询区间,但是在不同模式下,其代表的含义也不相同
    • 默认模式下,start~stop表示的是名次区间,且该区间为闭区间。名次从 0 开始,且可为负数,-1 表示倒数第一,-2 表示倒数第二,以此类推。
    • byscore 模式下(声明了 byscore 参数),则start~stop表示的就是分数区间,该区间默认仍为闭区间。在该模式下,可以在startstop前增加(来表示开区间,例如(1 (5,表示的就是(1,5)这个开区间。除此之外,还可以使用-inf+inf表示负无穷和正无穷。
  • byscore:用于切换到分数模式
  • rev:表示降序排序。在 byscore 模式下使用 rev 参数需要注意查询区间,start 应大于 stop。
  • limit:该选项只用于 byscore 模式,作用和 sql 语句中的 limit 一致
  • withscores:用于打印分数

应用场景

zset 主要用于各种排行榜。

Redis

Redis.conf 详解

Redis 持久化

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失,所以 Redis 提供了持久化功能!

RDB(Redis DataBase)

什么是 RDB

AOF(Append Only File)

将我们的所有命令都记录下来,history,恢复的时候就把这个文件全部执行一遍!

AOF

Redis 发布订阅

Redis 发布订阅(pub/sub)是一种==消息通信模式==:发送者(pub),订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

Redis 主从复制

Redis 缓存穿透和雪崩

Redis 数据备份与恢复

备份数据

redis Save 命令基本语法如下:

127.0.0.1:6379> SAVE
OK

该命令将在 redis 安装目录中创建 dump.rdb 文件。

恢复数据

登录目标 redis 服务器,我们先停止 redis 服务

service redis stop  #停止redis服务

然后进入 redis 的文件存放目录 redis,把刚刚备份的 dump.rdb 文件替换该目录下的 dump.rdb 文件(建议先备份当前目录下的 dump.rdb 文件),重启 redis 服务

service redis start #启动redis服务

到此,redis 数据迁移完成

获取

获取 redis 目录可以使用 CONFIG 命令,如下所示:

redis 127.0.0.1:6379> CONFIG GET dir

Redis
https://junyyds.top/2023/05/17/Redis/
作者
Phils
发布于
2023年5月17日
更新于
2025年4月29日
许可协议