13.数据库Redis

一、基本概念

        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 查看组内消费者流信息。

猜你喜欢

转载自blog.csdn.net/weixin_60466670/article/details/128967059
今日推荐