# Redis

# 参考文档

# 图形化界面

  • RESP(已过期),现已更为 RedisInsight

# 简介

# 不同点-与其他类型比较

  • 运行在内存中
  • Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。
  • Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
  • Redis 支持主从复制,即 master-slave 模式的数据备份。

# Redis 架构

Redis 主要由有两个程序组成:

  • 客户端 redis-cli
  • 服务器 redis-server

客户端、服务器可以位于同一台计算机或两台不同的计算机中。

# 数据类型

  • string,字符串
  • list,列表,按照插入顺序
  • hash,哈希,一般用来存对象
  • set,无序集合,成员唯一
  • zset,有序集合,成员唯一,有分数,可排序

# Redis 命令

  • redis-cli -h host -p port -a password
    • 连接远程的 Redis 服务。
    • 示例: redis-cli -h 127.0.0.1 -p 6379 -a "mypass"

# Redis Key 键命令

  • DEL key,删除 key
  • RENAME,修改名称
  • EXISTS,是否存在
  • KEYS [pattern],查找所有符合条件的 key
  • TYPE,返回 key 所存储的值的类型
  • RANDOMKEY,从当前数据库中随机返回一个 key
  • RENAMENX,仅当 newKey 不存在时,再进行修改
  • DUMP,序列化给定的 key
  • EXPIRE,设置过期时间
  • EXPIREAT,设置过期的时间戳
  • PEXPIREAT,设置过期的时间戳,以毫秒计
  • PERSIST,移除过期时间,key 将永久保持
  • TTL,以秒为单位,返回 key 的剩余过期时间
  • PTTL,以毫秒为单位,返回 key 的剩余过期时间
  • MOVE,将当前数据库中的 key 移动到给定的数据库中

# String 命令

  • SET k v,设置值
  • GET k,获取值
  • SETNX k v,设置值,当 k 不存在时,NX - if not exists
  • MSET k1 v1 k2 v2,设置多个键值对
  • MSETNX k1 v1 k2 v2,获取值,当给定的 key 全部不存在的时候
  • MGET k1 k2,获取多个 key 的值
  • APPEND k new_v,将值添加到 key 之前绑定的值后面
  • GETRANGE key start end,获取 key 对应的值的subString,index 的数值是相对于字符串末尾的偏移量,-1 就是最后一个字符
  • GETSET k v,将 k 的值设置为 v,并返回 k 的旧值
  • SETEX k time v,将值设为 v,将过期时间设置为time
  • STRLEN k,返回 k 对应的字符串的长度
  • INCR k,将 k 中存储的数字值加 1
  • INCRBY k x,将 k 中存储的数字值加 x
  • INCRBYFLOAT
  • DECR,减 1
  • DECRBY
  • DECRBYFLOAT

# Hash 命令

  • HSET k f v,设置一个字段
  • HGET k f,返回 value
  • HMSET k f1 v1 f2 v2,设置多个字段
  • HMGET k f1 f2,返回 v1 v2
  • HKEYS k,获取 key 中的所有字段
  • HLEN k,获取 key 中字段数量
  • HVALS k,获取所有 value
  • HGETALL k,获取所有字段和值
  • HSETNX,当字段名不存在时设置
  • HSCAN
  • HSTRLEN k f,返回指定 f 的字符串值的长度
  • ``,

# List 命令

  • LLEN,列表长度
  • LSET k index v
  • LINDEX k index,获取指定 index 的元素
  • LRANGE k start end,获取指定范围的元素
  • LREM k count 'string',删除 k 中 count 个等于 string 的值

# Set命令

  • SMEMBERS k,返回集合中的所有成员
  • SISMEMBER k v,v 是否在集合 k 中
  • SADD k v1 v2 v3,向集合添加值
  • SCARD,获取成员数
  • SDIFF k1 k2 k3,返回第一个 set 中独有的元素(不包含在后边的集合中的元素)。
  • SDIFFSTORE new_set k1 k2 k3,将独有的元素放进 new_set 中。
  • SINTER k1 k2 k3,所有集合的交集
  • SINTERSTORE new_set k1 k2 k3,所有集合的交集
  • SMOVE s1 d1 v,将 value 从 sourceSet 移动到 destination
  • SUNION k1 k2 k3,返回并集
  • SUNION new_set k1 k2 k3
  • SSCAN,示例 SSCAN myset1 0 match R* 20

# SortedSet 命令

  • ZADD k score v,向 k 中添加 value 以及值所对应的分数
  • ZCARD,返回成员数
  • ZSCORE k v,返回 v 的分数值
  • ZRANK k v,返回 v 的排名
  • ZCOUNT k min max,返回区间内的成员数,包括 min max
  • ZREM k v1 v2,移除成员
  • ZRANGE,返回范围内的成员
  • ZRANGEBYLEX,返回范围内的成员
  • ZRANGEBYSCORE k (1 5,返回 1 < 分数 <= 5 的成员

# Redis 事务

  • MULTI,标记一个事务块的开始
  • EXEC,执行所有事务块内的命令
  • DISCARD,取消事务,放弃执行事务块内的所有命令
  • WATCH,监视一些 key,一旦这些 key 在执行前被改变,则取消事务的执行
  • UNWATCH,取消对所有 key 的监视

# Redis 连接

  • AUTH password,验证密码是否正确
  • PING,查看服务是否运行
  • QUIT,关闭当前连接
  • SELECT index,切换到指定数据库
  • ECHO string,打印字符串

# Redis 内存优化

# 使用 Redis 作为 LRU 缓存

# Redis 分布式锁

# 算法最低保证

算法只需具备3个特性就可以实现一个最低保障的分布式锁。

  • 安全属性: 独享(相互排斥)。在任一时刻,只有一个客户端持有锁。
  • 活性 A:无死锁。即便持有锁的客户端崩溃或者网络分裂等,锁依然可以被拿到。
  • 活性 B:容错。只要大部分 Redis 节点活着,客户端就可以获取和释放锁。

概括: 独享、无死锁、容错。

# 配置文件

Redis 的根目录中有一个配置文件(redis.conf)。

  • config get setting_name,获取配置
  • config set setting_name setting_value,编辑配置

redis.conf 常用配置项。

  • port 6379
    • 指定 Redis 监听端口,默认端口为 6379
  • bind 127.0.0.1
    • 绑定的主机地址
  • timeout 300
    • 当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
  • databases 16
    • 设置数据库的数量,默认数据库为 0,可以使用 SELECT <dbid> 命令在连接上指定数据库 id
  • save <seconds> <changes>
    • 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
    • Redis 默认配置文件中提供了三个条件:
      • save 900 1
      • ​save 300 10
      • save 60 10000
      • 分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。
  • loglevel verbose
    • 指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 verbose
  • logfile stdout
    • 日志记录方式,默认为标准输出,如果配置 Redis 为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给 /dev/null
  • daemonize no
    • Redis 默认不是以守护进程的方式运行,可以通过该配置项修改,使用 yes 启用守护进程
  • pidfile /var/run/redis.pid
    • 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定。
  • rdbcompression yes
    • 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大
  • slaveof <masterip> <masterport>
    • 设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步
  • requirepass foobared
    • 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH <password> 命令提供密码,默认关闭
  • maxclients 128
    • 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息
  • maxmemory <bytes>
    • 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区

# 讨论区

由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。

点击查看评论区内容,渴望您的宝贵建议~
Last Updated: 10/19/2023, 5:15:31 PM