redis 资料整理

Redis 是一个高性能的键值存储系统,广泛应用于缓存、数据库等领域。本文详细介绍了Redis的各种命令,包括键相关、字符串、散列表、列表、集合、有序集合、GEO、HyperLogLog、数据流等,涵盖了从安装调试到实际操作的各个方面,是学习和使用Redis的重要参考资料。
摘要由CSDN通过智能技术生成

目录

Redis简介

Redis5.0新特性

Redis 安装与调试

安装

Stream

键相关命令

查看键信息

查看键类型type

查看键过期时间 ttl

设置键信息

设置键过期时间expire

删除键过期时间persist

重命名键rename

修改键最后访问 touch

查找键

判断键是否存在 exists

查找符合模式的键 keys

遍历键

随机取键 randomkey

操作键

删除键

序列化/反序列化键

移动键move

键排序 sort

字符串相关命令

设置字符串

set命令

mset 命令

修改字符串

append命令

setrange 命令

计数器命令

字符串获取

get 命令

getset 命令

getrange 命令

strlen 命令

mget命令

散列表相关命令

设置命令

读取命令

hexists命令

hget/hmget 命令

Hkeys/hvals/hgetall 命令

hlen 命令

hscan 命令

删除命令

hdel 命令

自增命令

列表相关命令

栈和队列命令列表

push/pop 相关命令

push命令

pop 命令

阻塞 push/pop 类命令的实现

获取列表数据

获取单个元素 lindex

获取多个元素 lrange

获取列表长度 llen

操作列表

设置元素 lset

插入元素 linsert

删除元素 lrem

裁剪列表 ltrim

集合相关命令

添加成员sadd

删除成员 srem

获取成员 spop/srandmember

smembers命令

查找成员sismember

移动成员 smove

获取基数 scard

遍历成员 sscan

集合运算

交集 sinter

sinterstore命令

并集 sunion

差集 sdiff

有序集合相关命令

zadd命令

zrem命令

zcard 命令

zcount 命令

zincrby 命令

zrank 命令

zrevrank 命令

zscore 命令

zscan 命令

zrange 命令

zrevrange 命令

zrangebyscore 命令

zrevrangebyscore 命令

zrangebylex 命令

zlexcount命令

zremrangebyrank 命令

zremrangebyscore 命令

zremrangebylex 命令

zunionstore命令

zinterstore 命令

GEO 相关命令

geohash 算法

命令介绍

添加地理坐标geoadd

返回标准的 geohash 字符串 geohash

返回经纬度 geopos

计算坐标距离 geodist

查找坐标指定范围内其他坐标georadius

HyperLogLog 相关命令

HLL Redis 实现

添加基数pfadd

统计基数 pfcount

合并基数集 pfmerge

数据流相关命令

xadd命令

xrange 命令

xrevrange 命令

xdel 命令

xgroup 命令

xreadgroup 命令

xread 命令

xack 命令

xpending 命令

xclaim 命令

xinfo命令

xtrim 命令

xlen 命令

其他命令

事务

事务简介

事务命令的实现

发布-订阅命令实现

发布命令 publish

订阅命令subscribe

取消订阅命令unsubscribe

订阅指定模式渠道命令psubscribe

取消订阅指定渠道命令punsubscribe

查看订阅状态命令 pubsub

LUA脚本

持久化

RDB

AOF

AOF 文件写入

AOF 重写

主从复制

主从复制功能实现

哨兵和集群

哨兵

集群

集群简介

副本漂移

分片漂移


Redis简介

Redis5.0新特性

  • 新增 Streams 数据类型,这是 Redis5.0最重要的改进之一。可以把 Streams 当做消息队列。

  • 新的模块 API、定时器、集群及字典。

  • RDB 中持久化存储 LFU 和 LRU 的信息

  • 将集群管理功能完全用 C 语言集成到 redis-cli 中,Redis 3.x 和 Redis 4.x 的集群管理是通过 Ruby 脚本实现的。

  • 有序集合新增命令 ZPOPMIN/ZPOPMAX。

  • 改进 HyperLogLog 的实现。

  • 新增 Client Unblock 和 Client ID

  • 新增 LOLWUT 命令。

  • Redis 主从复制中的从不在称为 Slave,改成 Replicas。

  • Redis 5.0引入动态哈希,以平衡 CPU 的使用率和响应性能,可以通过配置文件进行配置。Redis 5.0默认使用动态哈希。

  • Redis 核心代码进行了部分重构和优化。

Redis 安装与调试

安装

$ wget http://download.redis.io/releases/redis-5.0.0.tar.gz
$ tar -zxvf redis-5.0.0.tar.gz
$ cd redis-5.0.0
$ make
$ cd src
$ make install

至此,编译安装完成,生成的可执行文件在/usr/local/bin 目录中。

  • 其中redis-benchmark 是官方自带的 Redis 性能测试工具;

  • 当 AOF 文件或者 RDB 文件出现语法错误时,可以使用 redis-check-aof 或者 redis-check-rdb 修复;

  • redis-cli 是客户端命令行工具,可以通过命令 redis-cli -h {host} -p {port}连接到指定 Redis 服务其;

  • redis-sentinel 是 Redis 哨兵启动程序;

  • redis-server 是 Redis 服务端启动程序。

Stream

Stream 结构主要由消息、生产者、消费者、消费组4部分组成。

键相关命令

查看键信息

查看键类型type

type 命令用于查看 key 的类型,一般用于排查问题

格式:type key

查看键过期时间 ttl

ttl命令返回 key 剩余生存时间,单位秒。一般用于根据 key 生存时间进行业务逻辑判断处理等,也可以排插问题。类似命令还有 pttl 返回以毫秒为单位的生存时间。

格式:ttl key

设置键信息

设置键过期时间expire

expire 命令用于设置 key 的过期时间,一般情况下 redis 的 key 应该都有一个对应的过期时间。类似命令还有 expireat、pexpire、pexpireat,格式都一样,区别在于时间和单位。他们调用的函数也是同一个,以 expire 为例。

格式:expire key seconds

删除键过期时间persist

persist 命令用于移除 key 的过期时间,如果有。有时候我们需要将临时 key 编程永久 key,那么可以使用 persist 命令处理。

格式:persist key

重命名键rename

rename命令将 key 重命名,使用频率较低。同样类似命令还有 renamenx,标识重命名后的 key 不存在时才能执行成功。

格式:rename key new_key

修改键最后访问 touch

touch 命令用于更新 key 的访问时间,避免被 lru 策略淘汰,使用频率较低。

格式:touch key [key ...]

查找键

exists 命令查询键是否存在,keys 命令查找符合模式的键,scan 命令遍历键,以及 randomkey 命令随机取键。

判断键是否存在 exists

exists 命令用于判断指定的 key 是否存在,并返回 key 存在的数量

格式:exists key1 key2 ... key_N

查找符合模式的键 keys

keys 命令匹配合适的 key 并一次性返回,如果匹配的键较多,则可能阻塞服务器,因此该命令一般禁止在线上使用。

格式:keys pattern

遍历键

scan 命令可以遍历数据库中几乎所有的键,并且不用担心阻塞服务器。使用频率低

格式:scan cursor [MATCH pattern] [COUNT count]

随机取键 randomkey

rendomkey 命令随机返回数据库中的 key

操作键

del 是比较常用的删除键命令,unlink 是 Redis 4.0为了弥补 del 删除大值时阻塞服务器而加入的异步删除键命令。

删除键

del 命令用于同步删除一个或多个 key,因为池同步删除,所以在删除大 key 时可能会阻塞服务器。以阻塞方式删除 key

格式:del key [key ...]

unlink 命令以异步方式删除 key,这可以避免 del 删除大 key 的问题,unlink 在删除时会判断删除所需的工作量,以此决定使用同步还是异步删除(另一个线程中进行内存回收,不会阻塞当前线程),通常建议使用 unlink 代替 del 命令,但注意使用 unlink 命令需 Redis 版本在4.0及以上。

格式:unlink key [key ...]

说明:根据删除 key 需要的工作量来选择以阻塞或非阻塞方式删除 key。

序列化/反序列化键

  • dump 命令

    该命令将指定 key 序列化,一般使用较少。

    格式:dump key

    说明:序列化 key 并返回序列化后的数据。

  • restore 命令

    该命令使用 dump 命令序列化后的数据进行反序列化,使用频率较低。

    格式:restore key ttl serialized-value [replace]

    说明:反序列化给定的序列化值,并与 key 关联。

移动键move

  • move命令

    move 命令将指定 key 移动到另一个数据库,该命令使用较少。 此命令不能工作在集群模式下。

    格式:move key db

  • migrate 命令

    migrate 命令将指定 key 迁移到另一个 redis 实例,一般用于运维迁移数据。

    格式:migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key ...]]

键排序 sort

sort 命令对列表,集合或有序集合中的元素进行排序,使用方法相对复杂。

字符串相关命令

设置字符串

set命令

set 命令用于将 key-value 设置到数据库。如果 key 已经设置,则 set 会用新值覆盖旧值,如果在设置时不指定 ex 或 px 参数,set 命令会清除原有超时格式。

格式:

set key value [NX] [XX] [EX <deconds>] [PX <milliseconds>]

参数:

  • NX:当数据库中 key 不存在时,可以将 key-value 添加到数据库

  • XX:当数据库中 key存在时,可以将 key-value 设置到数据库,与 NX 参数互斥

  • EX:key 的超时秒数

  • PX:key 的超时毫秒数,与 EX参数互斥。

mset 命令

修改字符串

append命令

数据库已经有了 key,它的值为 value。当我们发现 value 值需要追加字符串却又不想直接用 set 命令覆盖原值时,可以用 append 命令来实现。将 value 值追加到原值的末尾,如果 key 不存在,此命令等同于 set key value命令。

格式:

append key value

setrange 命令

setrange 命令主要用于设置 value 的部分子串给,设置时将值从偏移量 offset 开始覆盖成 value 值。如果偏移值大于原值的长度,则偏移量之前的字符串由"\x00"填充。

格式:setrange key offset value

计数器命令

计数器命令主要包括 incr/decr、incrby/decrby 和 incrbyfloat 这5个相关命令,Redis 的计数器命令都是原子性的操作,因此并不会因为并发导致统计出错。

格式:

incr key

decr key

说明:将 key 存储的值加或减1

incrby key increment

decrby key decrement

说明:将 key 存储的值加或减指定值(increment//decrement)

字符串获取

get 命令

get 命令用于获取 key 的值,当 key 不存在时,返回 NULL,当 key 存在时,返回查找到的结果

getset 命令

getset 命令将指定 key 的值设为 value,并返回 key 的旧值。

格式:getset key value

getrange 命令

通过 get 命令可以完整的获取到字符串的值,但当我们只想获取字符串的部分子串时,通过 getrange 命令便可以实现。getrange 返回 key 的 value 值从 start 截取到 end 的子字符串。

格式:getrange key start end

strlen 命令

strlen 命令从数据库中获取到 value,返回 value 字符串的长度。

格式:strlen key

mget命令

散列表相关命令

设置命令

3个命令可使用:hset、hmset 和 hsetnx。

格式:

hset key field value

hmset key field value [field value ...]

hsetnx key field value

读取命令

命令有如下5类:

  • hexists:判断 field 域是否存在。

  • hget/hmget:获取单个 field 对应的 value 以及获取批量 field 对应的 value。

  • hkeys/hvals/hgetall:获取全部的 field、value 或者 field-value 对

  • hlen:获取 field 的总个数

  • hscan:遍历 hscan。

hexists命令

hexists 命令用于查看某个 field 是否存在,可以用于标识某个操作之前是否已经执行过。

格式:hexists key field

hget/hmget 命令

hget/hmget 命令用于获取单个 field 或者多个 field 对应的 value 值

格式:

hget key field

hmget key field [field ...]

Hkeys/hvals/hgetall 命令

hkeys 可以获取某个 key 下的所有 field 信息;hvals 可以获取每个 field 对应的 value 信息;hgetall 可以获取所有的 field-value 对。

格式:

hkeys key

hvals key

hgetall key

hlen 命令

hlen 命令可以用于获取散列表中 field 的个数,主要用于数据统计

格式:hlen key

hscan 命令

hscan 命令用于遍历散列表中所有的 field-value 对,需要注意的是,hscan 命令是渐进式遍历(当底层存储为散列表是)。

格式:hscan key cursor [Match pattern] [COUNT count]

删除命令

hdel 命令

hdel 命令直接调用 ziplist 或者散列表的接口将数据删除。

格式:hdel key field [field ...]

自增命令

当散列表 field-value 中的 field 为整数或者浮点型的数据时,有时需要对其中的 value 进行加减法操作,为此,Redis 提供了 hincrby、hincrbyfloat 两个命令。

格式:

hincrby key field increment

hincrbyfloat key field increment

列表相关命令

列表命令

命令名称 命令格式 命令简介
blpop blpop key [key ...] timeout 从列表 key 头部弹出元素并返回客户端,当列表 key 为空时会阻塞客户端,可以通过 timeout 设置最大阻塞时间,单位为秒
brpop brpop key [key ...] timeout 与 blpop 类似,只是从列表 key 的尾部弹出元素
brpoplpush Brpoplpush source destination timeout 从列表 source 尾部弹出元素并且插入列表 destination 头部,同时将该元素返回给客户端,当 source 列表为空时会阻塞客户端,timeout 用于设置最大阻塞时间,单位为秒
lindex lindex key index 返回列表 key 中下标为 index 的元素
linsert linsert key BEFORE/AFTER pivot value 将值 value 插入到列表 key,且位于值 pivot 之前或之后
llen llen key 返回列表 key 的长度
lpop lpop key 从列表 key 头部弹出元素并返回给客户端,与 blpop 不同的是它不会阻塞客户端,当列表 key 为空时返回 null
lpush Lpush key value [value ...] 将一个或多个值 value 插入到列表 key 的头部,当列表 key 不存在时会创建一个空的列表
lpushx lpushx key value 将值 value 插入到列表key 头部,当列表 key 不存在时该命令什么都不做
lrange lrange key start stop 返回列表 key 中指定区间内的元素,区间通过索引 start 和 stop 指定
lrem lrem key count value 移除列表中与参数 value 相等的元素;当 count 大于0,从表头开始向尾部搜索,最大删除 count 个元素;当 count 小于0;从尾部开始向表头搜索,最大删除 count 绝对值个元素;当 count 等于0,删除所有与 value 相等的元素
lset lset key index value 将列表 key 下标为 index的元素值设为 value
ltrim ltrim key start stop 对一个列表进行修剪,即让列表只保留区间 start 与 st
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一一可可

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值