Redis--6379

Redis--6379

Redis基本介绍

  • Redis的默认端口为6379
  • 列表和有序集合中索引从 0 开始,负数表示从尾部开始(例如 -1 表示最后一个元素)。
  • Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,广泛应用于缓存、消息队列、会话存储等场景。
  • 主要特点
    • 高性能:基于内存操作,读写速度极快。
    • 持久化:支持RDB和AOF两种持久化方式,确保数据安全。
    • 丰富的数据结构:支持字符串、哈希、列表、集合、有序集合等。
    • 原子操作:所有操作都是原子的,支持事务。
      • 原子操作指的是一个操作在执行过程中不会被其他操作打断,要么全部执行成功,要么全部不执行。
    • 高可用:通过主从复制和哨兵机制实现高可用。
    • 分布式:支持集群模式,数据分片存储。
  • 数据结构
    • 字符串(String):最基本的数据类型,可以存储文本或二进制数据。
    • 哈希(Hash):键值对集合,适合存储对象。
    • 列表(List):有序的字符串列表,支持双向操作。
    • 集合(Set):无序且唯一的字符串集合。
    • 有序集合(Sorted Set):有序且唯一的字符串集合,每个元素关联一个分数。
  • 持久化
    • RDB(Redis Database):定期生成数据快照,适合备份和恢复。
    • AOF(Append-Only File):记录所有写操作,适合数据持久化。
  • 事务
    • Redis支持简单的事务,通过MULTIEXECDISCARDWATCH命令实现。事务中的命令会按顺序执行,但不支持回滚。
  • 高可用与分布式
    • 主从复制:主节点负责写操作,从节点负责读操作,数据从主节点同步到从节点。
    • 哨兵(Sentinel):监控主从节点,自动进行故障转移。
    • 集群(Cluster):数据分片存储,支持水平扩展。
  • 高可用与分布式
    • 主从复制:主节点负责写操作,从节点负责读操作,数据从主节点同步到从节点。
    • 哨兵(Sentinel):监控主从节点,自动进行故障转移。
    • 集群(Cluster):数据分片存储,支持水平扩展。

安装Redis

  • 使用Docker安装Redis

  • 官方的镜像文件中是没有Redis配置文件的,可以指定映射的配置文件

    • docker run -itd --name redis-master -p 6379:6379 -v /F/Docker/mapping/redis/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
      
    • 挂载到该容器内的某一个位置并使用该配置文件启动redis容器

  • 容器内启动多个Redis

    • redis-server  redis-6380.conf
      

大小写敏感性

特性 说明
键的大小写敏感性 Redis 的键是大小写敏感的,mykeyMyKey 是两个不同的键。
命令的大小写 Redis 的命令不区分大小写,GETget 是等价的。
命名规范 建议统一命名规范,避免因大小写问题导致键冲突或混淆。

Redis 键和值的类型

  • 键的类型

    • 键始终是字符串类型:无论值是什么数据类型,键本身都是一个字符串。
    • 二进制安全:Redis 的键和值是二进制安全的,这意味着键和值可以包含任何二进制数据,而不仅仅是文本数据(如 JPEG 图片、序列化对象等)。
  • 值的类型

    • Redis 支持以下数据类型作为值:
      • 字符串(String):最基本的数据类型,可以存储文本、数字或二进制数据。
      • 列表(List):一个有序的字符串列表,支持在头部或尾部插入和删除元素。
      • 哈希(Hash):一个键值对集合,适合存储对象。
      • 集合(Set):一个无序的字符串集合,元素唯一,不支持重复。
      • 有序集合(Sorted Set):类似于集合,但每个元素关联一个分数(score),用于排序。
  • 可以使用 TYPE 命令查看键对应的值的类型。

    • TYPE key
      
  • 中文显示问题

    • Redis 的键和值都是二进制安全的,可以存储任意二进制数据,包括中文字符。

    • Redis 不会对存储的数据进行编码或解码,数据以原始的字节形式存储。

    • Redis 存储的数据通常是 UTF-8 编码。

      • 如果存储一个字符串 "你好",Redis 会直接存储其字节表示(如 UTF-8 编码的字节序列),而不会关心这些字节代表什么内容。
      • 例如,当使用 SET mykey "你好" 命令时,Redis 会存储 "你好"UTF-8 编码字节序列。
    • 假设存储一个中文字符串 "你好"

      • SET mykey "你好"
        
      • Redis 会直接存储 "你好"UTF-8 编码字节序列(如 \xE4\xBD\xA0\xE5\xA5\xBD)。

      • Redis 不会关心这些字节的含义,只是将其作为二进制数据存储。

    • 当读取 mykey 时:

      • GET mykey
        
      • Redis 会返回存储的字节序列(如 \xE4\xBD\xA0\xE5\xA5\xBD)。

      • 如果知道这些字节是 UTF-8 编码的文本,可以将其解码为字符串 "你好"

Redis中通用命令

  • KEYS:查找匹配的键

    • 查找数据库中所有匹配指定模式的键。

    • KEYS pattern
      
      #返回所有以 user 开头的键。
      KEYS user*
      
    • KEYS 命令会遍历整个数据库,如果键的数量非常多,可能会导致性能问题。

    • 在生产环境中,建议使用 SCAN 命令代替 KEYS

  • SCAN:增量式遍历键

    • 作用:增量式地遍历数据库中的键,避免阻塞 Redis 服务。

    • SCAN cursor [MATCH pattern] [COUNT count]
      
      SCAN 0 MATCH user* COUNT 10  #每次返回最多 10 个匹配 user* 的键。
      
  • EXISTS:检查键是否存在

    • 检查一个或多个键是否存在。

    • EXISTS key [key ...] #返回 1 表示键存在,0 表示键不存在。多个值则返回存在键的个数
      
  • DEL:删除键

    • DEL key [key ...] #返回被删除键的数量。
      
  • RENAME:重命名键

    • RENAME key newkey
      
  • EXPIRE:设置键的过期时间

    • 为键设置过期时间(以秒为单位)。

    • EXPIRE key seconds
      
  • TTL:查看键的剩余过期时间

    • 作用:查看键的剩余过期时间(以秒为单位)。

    • TTL key
      
      • -2:键不存在。
      • -1:键存在,但没有设置过期时间。
      • 正整数:键的剩余过期时间。
  • TYPE:查看键对应的值的数据类型

    • TYPE key
      
      • string:字符串类型。
      • list:列表类型。
      • set:集合类型。
      • zset:有序集合类型。
      • hash:哈希类型。

数据库管理命令:

  • SELECT:选择数据库

    • 切换到指定的数据库。

    • SELECT index
      
  • FLUSHDB:清空当前数据库

    • 清空当前数据库中的所有键。

    • FLUSHDB
      
  • FLUSHALL:清空所有数据库

    • 清空所有数据库中的所有键。

    • FLUSHALL
      

Redis索引规则

  • Redis 列表的索引从 0 开始。

  • 负数索引表示从列表末尾开始计算,例如 -1 表示最后一个元素,-2 表示倒数第二个元素,依此类推。

  • start 大于 stop

    • LTRIM mylist 3 1 #清空
      LRANGE mylist 3 1 #empty array
      
    • LTRIM会清空列表

    • LRANGE显示为空(没有数据)

  • startstop 超出范围

    • 如果 startstop 超出列表的索引范围,Redis 会自动将其调整为列表的有效范围。

Redis值的类型数据

字符串String

  • 字符串是 Redis 最基本的数据类型,可以存储文本、数字或二进制数据。

  • 设置指定键的值。SET

    • SET key value [EX seconds] [PX milliseconds] [NX|XX]
      
      • key: 键名。
      • value: 键值。
      • EX seconds: 设置键的过期时间(秒)。
      • PX milliseconds: 设置键的过期时间(毫秒)。
      • NX: 仅当键不存在时设置。
      • XX: 仅当键存在时设置。
    • SET mykey "Hello Redis"
      SET mykey "Hello Redis" EX 60  # 设置键值并设置 60 秒过期时间
      SET mykey "Hello Redis" NX     # 仅当 mykey 不存在时设置
      
    • 如果键已经存在,SET 会直接覆盖旧值,无论旧值是什么类型。

    • 如果键之前设置了过期时间,SET清除过期时间,除非显式地通过 EXPX 选项重新设置。

  • 获取指定键的值。GET

    • 获取指定键的值。GET key
    • 设置键的值并返回旧值。GETSET key value
    • 获取多个键的值。MGET key1 key2 key3 ...
  • 修改字符串

    • 将值追加到指定键的末尾。APPEND key value
    • 将键对应的值加 1(值必须是整数)。INCR key
    • 将键的值增加指定的整数。INCRBY key increment
    • 将键对应的值减 1(值必须是整数)。DECR key
    • 将键的值减少指定的整数。DECRBY key decrement
  • 查询字符串

    • 获取键的值的长度。STRLEN key
    • 获取所有的值 Keys *

列表List

基本介绍:

  • Redis 中的 列表(List) 是一种有序的、可重复的数据结构,基于双向链表实现。列表允许在头部或尾部高效地插入和删除元素,适合实现栈、队列等数据结构。
  • 特性
    • 有序性:列表中的元素按照插入顺序排列。
    • 可重复性:列表中的元素可以重复。
    • 高效操作
      • 在头部或尾部插入、删除元素的时间复杂度为 O(1)。
      • 通过索引访问元素的时间复杂度为 O(n)。

常用命令:

  • 插入元素

    • 在头部插入元素(LPUSH)

    • LPUSH key value [value ...]
      
      • 将一个或多个元素插入到列表的头部。
    • 在尾部插入元素(RPUSH)

    • RPUSH key value [value ...]
      
  • 删除元素

    • 从头部删除元素(LPOP)

      • LPOP key
        
      • 移除并返回列表的第一个元素。

    • 从尾部删除元素(RPOP)

  • 获取元素

    • 获取列表长度(LLEN)

      • LLEN key
        
      • 返回列表的长度。

    • 获取指定范围的元素(LRANGE)

      • LRANGE key start stop
        
      • 返回列表中指定范围的元素(闭区间)。

    • 通过索引获取元素(LINDEX)

      • LINDEX key index
        
      • 返回列表中指定索引位置的元素。

  • 修改元素

    • 设置指定索引位置的元素(LSET)

      • LSET key index value
        
      • 将列表中指定索引位置的元素设置为新值。

  • 其他操作

    • 修剪列表(LTRIM)

      • LTRIM key start stop
        
      • 只保留列表中指定范围的元素,其余元素删除。

    • 插入元素(LINSERT)

      • LINSERT key BEFORE|AFTER pivot value
        
      • 在列表中某个元素的前面或后面插入新元素。

集合Set

基本介绍:

  • Redis 中的 集合(Set) 是一种无序的、唯一的数据结构,适合存储不重复的元素。集合支持高效的添加、删除和查找操作,常用于去重、交集、并集等场景。
  • 集合的特性
    • 无序性:集合中的元素没有顺序。
    • 唯一性:集合中的元素不允许重复。
    • 高效操作
      • 添加、删除、查找元素的时间复杂度为 O(1)。
      • 计算交集、并集、差集的时间复杂度与集合大小相关。

常用命令:

  • 添加元素

    • 添加一个或多个元素(SADD)

    • SADD key member [member ...]
      
    • 将一个或多个元素添加到集合中。返回值为成功添加的元素个数,重复值不会添加

  • 删除元素

    • 删除一个或多个元素(SREM)

    • SREM key member [member ...]
      
    • 从集合中删除一个或多个元素。返回值为成功删除的元素个数

  • 获取元素

    • 获取集合中的所有元素(SMEMBERS)

    • SMEMBERS key
      
    • 返回集合中的所有元素。

    • 随机获取一个元素(SRANDMEMBER)

    • SRANDMEMBER key [count]
      
    • 随机返回集合中的一个或多个元素。

  • 检查元素是否存在

    • 检查元素是否在集合中(SISMEMBER)

    • SISMEMBER key member
      
    • 返回 1 表示存在,0 表示不存在。

  • 集合运算

    • 求多个集合的交集(SINTER)

      • SINTER key [key ...]
        
      • 返回多个集合的交集。

    • 求多个集合的并集(SUNION)

      • SUNION key [key ...]
        
      • 返回多个集合的并集。

    • 求多个集合的差集(SDIFF)

      • SDIFF key [key ...]
        
      • 返回多个集合的差集(第一个集合有而其他集合没有的元素)。

  • 其他操作

    • 获取集合的大小(SCARD)

      • SCARD key
        
      • 返回集合中元素的数量。

有序集合(Sorted Set)

基本介绍:

  • Redis 中的 有序集合(Sorted Set) 是一种有序的、唯一的数据结构,每个元素都关联一个分数(score),用于排序。有序集合结合了集合和有序列表的特性,适合存储需要排序的数据。
  • 有序集合的特性
    • 有序性:元素按照分数(score)排序。
    • 唯一性:元素不允许重复,但分数可以重复。
    • 高效操作
      • 添加、删除、查找元素的时间复杂度为 O(log N)。
      • 支持范围查询、排名查询等操作。

常用命令:

  • 添加元素

    • 添加一个或多个元素(ZADD)

      • ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
        
      • 将一个或多个元素添加到有序集合中。

      • 可选参数:

        • NX:仅当元素不存在时添加。
        • XX:仅当元素存在时更新。
        • CH:返回被修改的元素数量。
        • INCR:将元素的分数增加指定值。
  • 删除元素

    • 删除一个或多个元素(ZREM)

      • ZREM key member [member ...]
        
      • 从有序集合中删除一个或多个元素。

    • 删除分数范围内的元素(ZREMRANGEBYSCORE)

      • ZREMRANGEBYSCORE key min max
        
      • 删除分数在 minmax 之间的元素。

    • 删除排名范围内的元素(ZREMRANGEBYRANK)

      • ZREMRANGEBYRANK key start stop
        
      • 删除排名在 startstop 之间的元素(排名从 0 开始)。

  • 获取元素

    • 获取集合中的所有元素(ZRANGE)

      • ZRANGE key start stop [WITHSCORES]
        
      • 返回有序集合中指定排名范围的元素(按分数升序排列)。

      • WITHSCORES:同时返回元素的分数。

    • 获取集合中的所有元素(按分数降序排列,ZREVRANGE)

      • ZREVRANGE key start stop [WITHSCORES]
        
      • 返回有序集合中指定排名范围的元素(按分数降序排列)。

    • 获取分数范围内的元素(ZRANGEBYSCORE)

      • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
        
      • 返回分数在 minmax 之间的元素。

  • 检查元素

    • 获取元素的分数(ZSCORE)

      • ZSCORE key member
        
      • 返回指定元素的分数。

    • 获取元素的排名(ZRANK/ZREVRANK)

      • ZRANK key member
        ZREVRANK key member
        
      • ZRANK:返回元素的排名(按分数升序排列,从 0 开始)。

      • ZREVRANK:返回元素的排名(按分数降序排列,从 0 开始)。

  • 集合运算

    • 求多个有序集合的交集(ZINTERSTORE)

      • ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
        
      • 计算多个有序集合的交集,并将结果存储到 destination 中。

      • 可选参数:

        • WEIGHTS:为每个集合的分数设置权重。
        • AGGREGATE:指定交集分数的聚合方式(SUMMINMAX)。
    • 求多个有序集合的并集(ZUNIONSTORE)

      • ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
        
      • 计算多个有序集合的并集,并将结果存储到 destination 中。

  • 其他操作

    • 获取集合的大小(ZCARD)

      • ZCARD key
        
      • 返回有序集合中元素的数量。

    • 获取分数范围内的元素数量(ZCOUNT)

      • ZCOUNT key min max
        
      • 返回分数在 minmax 之间的元素数量。

哈希Hash

基本介绍

  • Redis 中的 哈希(Hash) 是一种键值对集合,适合存储对象或结构化数据。哈希的键和值都是字符串类型,常用于存储对象的属性和值。
  • 哈希的特性
    • 结构化数据:哈希适合存储对象或结构化数据,例如用户信息、商品信息等。
    • 高效操作
      • 添加、删除、查找单个字段的时间复杂度为 O(1)。
      • 获取所有字段或值的时间复杂度为 O(N),其中 N 是字段数量。

常用命令

  • 添加字段

    • 设置单个字段的值(HSET)

      • HSET key field value
        
      • 设置哈希中指定字段的值。

    • 设置多个字段的值(HMSET)

      • HMSET key field value [field value ...]
        
      • 设置哈希中多个字段的值。

  • 获取字段的值

    • 获取单个字段的值(HGET)

      • HGET key field
        
      • 返回哈希中指定字段的值。

    • 获取多个字段的值(HMGET)

      • HMGET key field [field ...]
        
    • 获取所有字段和值(HGETALL)

      • HGETALL key
        
  • 删除字段

    • 删除一个或多个字段(HDEL)

      • HDEL key field [field ...]
        
      • 删除哈希中一个或多个字段。

  • 检查字段

    • 检查字段是否存在(HEXISTS)

      • HEXISTS key field
        
      • 检查哈希中是否存在指定字段。

      • 返回 1 表示存在,0 表示不存在。

  • 获取字段信息

    • 获取所有字段(HKEYS)

      • HKEYS key
        
      • 返回哈希中所有字段。

    • 获取所有值(HVALS)

      • HVALS key
        
      • 返回哈希中所有值。

    • 获取字段数量(HLEN)

      • HLEN key
        
      • 返回哈希中字段的数量。

  • 其他操作

    • 增加字段的值(HINCRBY)

      • HINCRBY key field increment
        
      • 将哈希中指定字段的值增加 increment

      • 如果字段不存在,则会先将其值初始化为 0,然后再执行增量操作。

      • 如果字段的值不是整数,则会返回错误。

posted @ 2025-03-26 18:36  QAQ001  阅读(81)  评论(0)    收藏  举报