哈尔滨网站建设贴吧重庆建站公司官网
一、基本概念
Redis(Remote Dictionary Server)译为“远程字典服务”,它是一款基于内存实现的键值型 NoSQL 数据库, 通常也被称为数据结构服务器,这是因为它可以存储多种数据类型,比如 string(字符串),hash(哈希散列),list(列表),set(集合)和 sorted set(有序集合)等。
二、配置
| 配置项 | 参数 | 说明 |
|---|---|---|
| daemonize | no/yes | 默认为 no,表示 Redis 不是以守护进程的方式运行,通过修改为 yes 启用守护进程。 |
| pidfile | 文件路径 | 当 Redis 以守护进程方式运行时,会把进程 pid 写入自定义的文件中。 |
| port | 6379 | 指定 Redis 监听端口,默认端口为 6379。 |
| bind | 127.0.0.1 | 绑定的主机地址。 |
| timeout | 0 | 客户端闲置多长秒后关闭连接,若指定为 0 ,表示不启用该功能。 |
| loglevel | notice | 指定日志记录级别,支持四个级别:debug、verbose、notice、warning,默认为 notice。 |
| logfile | stdout | 日志记录方式,默认为标准输出。 |
| databases | 16 | 设置数据库的数量(0-15个)共16个,Redis 默认选择的是 0 库,可以使用 SELECT 命令来选择使用哪个数据库储存数据。 |
| save[seconds] [changes] | 可以同时配置三种模式: save 900 1 save 300 10 save 60 10000 | 表示在规定的时间内,执行了规定次数的写入或修改操作,Redis 就会将数据同步到指定的磁盘文件中。比如 900s 内做了一次更改,Redis 就会自动执行数据同步。 |
| rdbcompression | yes/no | 当数据存储至本地数据库时是否要压缩数据,默认为 yes。 |
| dbfilename | dump.rdb | 指定本地存储数据库的文件名,默认为 dump.rdb。 |
| dir | ./ | 指定本地数据库存放目录。 |
| slaveof <masterip> <masterport> | 主从复制配置选项 | 当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动与 master 主机进行数据同步。 |
| requirepass | foobared 默认关闭 | 密码配置项,默认关闭,用于设置 Redis 连接密码。如果配置了连接密码,客户端连接 Redis 时需要通过<password> 密码认证。 |
| maxmemory <bytes> | 最大内存限制配置项 | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会尝试清除已到期或即将到期的 Key,当此方法处理 后,若仍然到达最大内存设置,将无法再进行写入操作,但可以进行读取操作。 |
| appendfilename | appendonly.aof | 指定 AOF 持久化时保存数据的文件名,默认为 appendonly.aof。 |
| glueoutputbuf | yes | 设置向客户端应答时,是否把较小的包合并为一个包发送,默认开启状态。 |
三、数据类型
Redis 是 Key-Value 类型缓存型数据库,Redis 为了存储不同类型的数据,提供了五种常用数据类型,如下所示:
- string(字符串)
- hash(哈希散列)
- list(列表)
- set(集合)
- zset(sorted set:有序集合)
key 键:这里的 key 被形象的称之为密钥,Redis 提供了诸多操作这把“密钥”的命令,从而实现了对存储数据的管理。
| 命令 | 说明 |
|---|---|
| DEL key | 若键存在的情况下,该命令用于删除键。 |
| DUMP key | 用于序列化给定 key ,并返回被序列化的值。 |
| EXSISTS key | 用于检查键是否存在,若存在则返回 1,否则返回 0。 |
| EXPIRE key | 设置 key 的过期时间,以秒为单位。 |
| EXPIREAT key | 该命令与 EXPIRE 相似,用于为 key 设置过期时间,不同在于,它的时间参数值采用的是时间戳格式。 |
| PEXPIRE key | 设置 key 的过期,以毫秒为单位。 |
| PEXPIREAT key | 与 PEXPIRE 相似,用于为 key 设置过期时间,采用以毫秒为单位的时间戳格式。 |
| KEYS pattern | 此命令用于查找与指定 pattern 匹配的 key。 |
| MOVE key db | 将当前数据库中的 key 移动至指定的数据库中(默认存储为 0 库,可选 1-15中的任意库)。 |
| PEXSIST key | 该命令用于删除 key 的过期时间,然后 key 将一直存在,不会过期。 |
| PTTL key | 用于检查 key 还剩多长时间过期,以毫秒为单位。 |
| TTL key | 用于检查 key 还剩多长时间过期,以秒为单位。 |
| RANDOMKEY | 从当前数据库中随机返回一个 key。 |
| RENAME key newkey | 修改 key 的名称。 |
| RENAMENX key newkey | 如果新键名不重复,则将 key 修改为 newkey。 |
| SCAN cursor | 基于游标的迭代器,用于迭代数据库中存在的所有键,cursor 指的是迭代游标。 |
| TYPE key | 该命令用于获取 value 的数据类型。 |
string 字符串:最基本的数据类型。
| 命令 | 说明 |
|---|---|
| SET key value | 用于设定指定键的值。 |
| GET key | 用于检索指定键的值。 |
| GETRANGE key start end | 返回 key 中字符串值的子字符。 |
| GETSET key value | 将给定 key 的值设置为 value,并返回 key 的旧值。 |
| GETBIT key offset | 对 key 所存储的字符串值,获取其指定偏移量上的位(bit)。 |
| MGET key1 [key2..] | 批量获取一个或多个 key 所存储的值,减少网络耗时开销。 |
| SETBIT key offset value | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
| SETEX key seconds value | 将值 value 存储到 key中 ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
| SETNX key value | 当 key 不存在时设置 key 的值。 |
| SETRANGE key offset value | 从偏移量 offset 开始,使用指定的 value 覆盖的 key 所存储的部分字符串值。 |
| STRLEN key | 返回 key 所储存的字符串值的长度。 |
| MSET key value [key value ...] | 该命令允许同时设置多个键值对。 |
| MSETNX key value [key value ...] | 当指定的 key 都不存在时,用于设置多个键值对。 |
| PSETEX key milliseconds value | 此命令用于设置 key 的值和有过期时间(以毫秒为单位)。 |
| INCR key | 将 key 所存储的整数值加 1。 |
| INCRBY key increment | 将 key 所储存的值加上给定的递增值(increment)。 |
| INCRBYFLOAT key increment | 将 key 所储存的值加上指定的浮点递增值(increment)。 |
| DECR key | 将 key 所存储的整数值减 1。 |
| DECRBY key decrement | 将 key 所储存的值减去给定的递减值(decrement)。 |
| APPEND key value | 该命令将 value 追加到 key 所存储值的末尾。 |
bitmap 位图:bitmap 是用来解决存储多个布尔值的数据类型。
| SETBIT key offset value | 用来设置或者清除某一位上的值,其返回值是原来位上存储的值。key 在初始状态下所有的位都为 0 。 |
| GETBIT key offset | 用来获取某一位上的值。 |
| BITCOUNT key [start end] | 统计指定位区间上,值为 1 的个数。 |
list 列表:是一个双向链表,可存储相同的元素。
| 命令 | 说明 |
|---|---|
| LPUSH key value1 [value2] | 在列表头部插入一个或者多个值。 |
| LRANGE key start stop | 获取列表指定范围内的元素。 |
| RPUSH key value1 [value2] | 在列表尾部添加一个或多个值。 |
| LPUSHX key value | 当储存列表的 key 存在时,用于将值插入到列表头部。 |
| RPUSHX key value | 当存储列表的 key 存在时,用于将值插入到列表的尾部。 |
| LINDEX key index | 通过索引获取列表中的元素。 |
| LINSERT key before|after pivot value | 指定列表中一个元素在它之前或之后插入另外一个元素。 |
| LREM key count value | 表示从列表中删除元素与 value 相等的元素。count 表示删除的数量,为 0 表示全部移除。 |
| LSET key index value | 表示通过其索引设置列表中元素的值。 |
| LTRIM key start stop | 保留列表中指定范围内的元素值。 |
| LPOP key | 从列表的头部弹出元素,默认为第一个元素。 |
| RPOP key | 从列表的尾部弹出元素,默认为最后一个元素。 |
| LLEN key | 用于获取列表的长度。 |
| RPOPLPUSH source destination | 用于删除列表中的最后一个元素,然后将该元素添加到另一个列表的头部,并返回该元素值。 |
| BLPOP key1 [key2 ] timeout | 用于删除并返回列表中的第一个元素(头部操作),如果列表中没有元素,就会发生阻塞, 直到列表等待超时或发现可弹出元素为止。 |
| BRPOP key1 [key2 ] timeout | 用于删除并返回列表中的最后一个元素(尾部操作),如果列表中没有元素,就会发生阻塞, 直到列表等待超时或发现可弹出元素为止。 |
| BRPOPLPUSH source destination timeout | 从列表中取出最后一个元素,并插入到另一个列表的头部。如果列表中没有元素,就会发生 阻塞,直到等待超时或发现可弹出元素时为止。 |
hash 散列表:hash(哈希散列)是由字符类型的 field(字段)和 value 组成的哈希映射表结构(也称散列表),它非常类似于表格结构。在 hash 类型中,field 与 value 一一对应,且不允许重复。
| 命令 | 说明 |
|---|---|
| HDEL key field2 [field2] | 用于删除一个或多个哈希表字段。 |
| HEXISTS key field | 用于确定哈希表字段是否存在。 |
| HGET key field | 获取 key 关联的哈希字段的值。 |
| HGETALL key | 获取 key 关联的所有哈希字段值。 |
| HINCRBY key field increment | 给 key 关联的哈希字段做整数增量运算 。 |
| HINCRBYFLOAT key field increment | 给 key 关联的哈希字段做浮点数增量运算 。 |
| HKEYS key | 获取 key 关联的所有字段和值。 |
| HLEN key | 获取 key 中的哈希表的字段数量。 |
| HMSET key field1 value1 [field2 value2 ] | 在哈希表中同时设置多个 field-value(字段-值) |
| HMGET key field1 [field2] | 用于同时获取多个给定哈希字段(field)对应的值。 |
| HSET key field value | 用于设置指定 key 的哈希表字段和值(field/value)。 |
| HSETNX key field value | 仅当字段 field 不存在时,设置哈希表字段的值。 |
| HVALS key | 用于获取哈希表中的所有值。 |
| HSCAN key cursor | 迭代哈希表中的所有键值对,cursor 表示游标,默认为 0。 |
set 无序集合:set (集合)遵循无序排列的规则,集合中的每一个成员(也就是元素,叫法不同而已)都是字符串类型,并且不可重复。
| 命令 | 说明 |
|---|---|
| SADD key member1 [member2] | 向集合中添加一个或者多个元素,并且自动去重。 |
| SCARD key | 返回集合中元素的个数。 |
| SDIFF key1 [key2] | 求两个或多个集合的差集。 |
| SDIFFSTORE destination key1 [key2] | 求两个集合或多个集合的差集,并将结果保存到指定的集合中。 |
| SINTER key1 [key2] | 求两个或多个集合的交集。 |
| SINTERSTORE destination key1 [key2] | 求两个或多个集合的交集,并将结果保存到指定的集合中。 |
| SISMEMBER key member | 查看指定元素是否存在于集合中。 |
| SMEMBERS key | 查看集合中所有元素。 |
| SMOVE source destination member | 将集合中的元素移动到指定的集合中。 |
| SPOP key [count] | 弹出指定数量的元素。 |
| SRANDMEMBER key [count] | 随机从集合中返回指定数量的元素,默认返回 1个。 |
| SREM key member1 [member2] | 删除一个或者多个元素,若元素不存在则自动忽略。 |
| SUNION key1 [key2] | 求两个或者多个集合的并集。 |
| SUNIONSTORE destination key1 [key2] | 求两个或者多个集合的并集,并将结果保存到指定的集合中。 |
| SSCAN key cursor [match pattern] [count count] | 该命令用来迭代的集合中的元素。 |
zset 有序集合: zset(有序集合)中的成员是有序排列的,它和 set 集合的相同之处在于,集合中的每一个成员都是字符串类型,并且不允许重复;而它们最大区别是,有序集合是有序的,set 是无序的,这是因为有序集合中每个成员都会关联一个 double(双精度浮点数)类型的 score (分数值),Redis 正是通过 score 实现了对集合成员的排序。
| 命令 | 说明 |
|---|---|
| ZADD key score1 member1 [score2 member2] | 用于将一个或多个成员添加到有序集合中,或者更新已存在成员的 score 值 |
| ZCARD key | 获取有序集合中成员的数量 |
| ZCOUNT key min max | 用于统计有序集合中指定 score 值范围内的元素个数。 |
| ZINCRBY key increment member | 用于增加有序集合中成员的分值。 |
| ZINTERSTORE destination numkeys key [key ...] | 求两个或者多个有序集合的交集,并将所得结果存储在新的 key 中。 |
| ZLEXCOUNT key min max | 当成员分数相同时,计算有序集合中在指定词典范围内的成员的数量。 |
| ZRANGE key start stop [WITHSCORES] | 返回有序集合中指定索引区间内的成员数量。 |
| ZRANGEBYLEX key min max [LIMIT offset count] | 返回有序集中指定字典区间内的成员数量。 |
| ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 返回有序集合中指定分数区间内的成员。 |
| ZRANK key member | 返回有序集合中指定成员的排名。 |
| ZREM key member [member ...] | 移除有序集合中的一个或多个成员。 |
| ZREMRANGEBYLEX key min max | 移除有序集合中指定字典区间的所有成员。 |
| ZREMRANGEBYRANK key start stop | 移除有序集合中指定排名区间内的所有成员。 |
| ZREMRANGEBYSCORE key min max | 移除有序集合中指定分数区间内的所有成员。 |
| ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,通过索引,分数从高到低。 |
| ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员,分数从高到低排序。 |
| ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序。 |
| ZSCORE key member | 返回有序集中,指定成员的分数值。 |
| ZUNIONSTORE destination numkeys key [key ...] | 求两个或多个有序集合的并集,并将返回结果存储在新的 key 中。 |
| ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值)。 |
hyperloglog 基数统计:hyperLoglog 不会储存元素值本身,因此,它不能像 set 那样,可以返回具体的元素值。hyperLoglog 只记录元素的数量,并使用基数估计算法,快速地计算出集合的基数是多少。
| 命令 | 说明 |
|---|---|
| PFADD key element [element ...] | 添加指定元素到 HyperLogLog key 中。 |
| PFCOUNT key [key ...] | 返回指定 HyperLogLog key 的基数估算值。 |
| PFMERGE destkey sourcekey [sourcekey ...] | 将多个 HyperLogLog key 合并为一个 key。 |
四、其他命令
连接命令:
| 命令 | 说明 |
|---|---|
| AUTH password | 验证密码是否正确 |
| ECHO message | 打印字符串 |
| PING | 查看服务是否运行正常 |
| QUIT | 关闭当前连接 |
| SELECT index | 切换到指定的数据库 |
客户端命令:
| 命令 | 说明 |
|---|---|
| CLIENT LIST | 以列表的形式返回所有连接到 Redis 服务器的客户端。 |
| CLIENT SETNAME name | 设置当前连接的名称。 |
| CLIENT GETNAME | 获取通过 CLIENT SETNAME 命令设置的服务名称。 |
| CLIENT PAUSE timeout | 挂起客户端连接,将所有客户端挂起指定的时间(以毫秒为计算)。 |
| CLIENT KILL | 关闭客户端连接。 |
| CLIENT ID | 返回当前客户端 ID。 |
| CLIENT REPLY | 控制发送到当前连接的回复,可选值包括 on|off|skip。 |
服务端命令:
| 命令 | 说明 |
|---|---|
| BGREWRITEAOF | 在后台以异步的方式执行一个 AOF 文件的重写操作,对源文件进行压缩,使其体积变小。 AOF 是实现数据持久化存储的方式之一。 |
| BGSAVE | 在后台执行初始化操作,并以异步的方式将当前数据库的数据保存到磁盘中。 |
| COMMAND | 返回所有 Redis 命令的详细描述信息。 |
| COMMAND COUNT | 此命令用于获取 Redis 命令的总数。 |
| COMMAND GETKEYS | 获取指定命令的所有键。 |
| INFO [section] | 获取 Redis 服务器的各种信息和统计数值。 |
| COMMAND INFO command-name [command-name ...] | 用于获取指定 Redis 命令的描述信息。 |
| CONFIG GET parameter | 获取指定配置参数的值。 |
| CONFIG REWRITE | 修改启动 Redis 服务器时所指定的 redis.conf 配置文件。 |
| CONFIG SET parameter value | 修改 Redis 配置参数,无需重启。 |
| CONFIG RESETSTAT | 重置 INFO 命令中的某些统计数据。 |
| DBSIZE | 返回当前数据库中 key 的数量。 |
| DEBUG OBJECT key | 获取 key 的调试信息。当 key 存在时,返回有关信息;当 key 不存在时,返回一个错误。 |
| DEBUG SEGFAULT | 使用此命令可以让服务器崩溃。 |
| FLUSHALL | 清空数据库中的所有键。 |
| FLUSHDB | 清空当前数据库的所有 key。 |
| LASTSAVE | 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 格式表示。 |
| MONITOR | 实时打印出 Redis 服务器接收到的命令。 |
| ROLE | 查看主从实例所属的角色,角色包括三种,分别是 master、slave、sentinel。 |
| SAVE | 执行数据同步操作,将 Redis 数据库中的所有数据以 RDB 文件的形式保存到磁盘中。 RDB 是 Redis 中的一种数据持久化方式。 |
| SHUTDOWN [NOSAVE] [SAVE] | 将数据同步到磁盘后,然后关闭服务器。 |
| SLAVEOF host port | 此命令用于设置主从服务器,使当前服务器转变成为指定服务器的从属服务器, 或者将其提升为主服务器(执行 SLAVEOF NO ONE 命令)。 |
| SLOWLOG subcommand [argument] | 用来记录查询执行时间的日志系统。 |
| SYNC | 用于同步主从服务器。 |
| SWAPDB index index | 用于交换同一 Redis 服务器上的两个数据库,可以实现访问其中一个数据库的客户端连接,也可以立即访问另外一个数据库的数据。 |
| TIME | 此命令用于返回当前服务器时间。 |
五、发布订阅
PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(频道)。
| 命令 | 说明 |
|---|---|
| PSUBSCRIBE pattern [pattern ...] | 订阅一个或多个符合指定模式的频道。 |
| PUBSUB subcommand [argument [argument ...]] | 查看发布/订阅系统状态,可选参数 1) channel 返回在线状态的频道。 2) numpat 返回指定模式的订阅者数量。 3) numsub 返回指定频道的订阅者数量。 |
| PUBSUB subcommand [argument [argument ...]] | 将信息发送到指定的频道。 |
| PUNSUBSCRIBE [pattern [pattern ...]] | 退订所有指定模式的频道。 |
| SUBSCRIBE channel [channel ...] | 订阅一个或者多个频道的消息。 |
| UNSUBSCRIBE [channel [channel ...]] | 退订指定的频道。 |
六、消息队列
Stream 消息队列主要由四部分组成,分别是:消息本身、生产者、消费者和消费组。
| 命令 | 说明 |
|---|---|
| XADD | 添加消息到末尾。 |
| XTRIM | 对 Stream 流进行修剪,限制长度。 |
| XDEL | 删除指定的消息。 |
| XLEN | 获取流包含的元素数量,即消息长度。 |
| XRANGE | 获取消息列表,会自动过滤已经删除的消息。 |
| XREVRANGE | 反向获取消息列表,ID 从大到小。 |
| XREAD | 以阻塞或非阻塞方式获取消息列表。 |
| XGROUP CREATE | 创建消费者组。 |
| XREADGROUP GROUP | 读取消费者组中的消息。 |
| XACK | 将消息标记为"已处理"。 |
| XGROUP SETID | 为消费者组设置新的最后递送消息ID。 |
| XGROUP DELCONSUMER | 删除消费者。 |
| XGROUP DESTROY | 删除消费者组。 |
| XPENDING | 显示待处理消息的相关信息。 |
| XCLAIM | 转移消息的归属权。 |
| XINFO | 查看 Stream 流、消费者和消费者组的相关信息。 |
| XINFO GROUPS | 查看消费者组的信息。 |
| XINFO STREAM | 查看 Stream 流信息。 |
| XINFO CONSUMERS key group | 查看组内消费者流信息。 |
