Redis - 数据类型 & 常用命令

常见数据结构

键值类型

  1. Key 类型: String
  2. Value 类型
    1. 基本类型 String:hello world
    2. 基本类型 Hash:{ name: “Jack”, age : 21 }
    3. 基本类型 List:[ A → B → C → D ]
    4. 基本类型 Set:{ A, B, C },基本类型,无序集合
    5. 基本类型 SortedSet:{ A : 1, B : 2, C : 3 },有序集合
    6. 特殊类型 GEO:{ A : (12.3, 30.5) }
    7. 特殊类型 BitMap:0101010101010010101
    8. 特殊类型 HyperLog:0101010101010101010

其他数据库

  1. 文档类型 (MongoDB)
  2. 列类型 (HBase)
  3. Graph 类型 (Neo4j)

常见命令

  1. 特点:Redis 的所有自带的命令都是原子性的,不用担心并发问题

一、通用命令

命令功能
KEYS查看符合模板的所有 key
SET添加一个 key-value 键值对,如果原本存在则会更新 key 对应的 value 和 key 对应的 EXPIRE
DEL删除一个指定的 Key
EXIST判断 key 是否存在
EXPIRE给 key 设置有效期(单位:sec),到期自动删除
PERSIST将 key 设置为永久有效
TTL查看 key 的有效期,-1 表示永久有效,-2 表示不存在

二、不同数据结构操作命令

  1. key 格式最佳实践:[projectName]:[serviceName]:[className]:[id]

String 类型

  1. 常用命令

    SET添加或修改键值对
    SETNXset key-value if not exists 添加键值对,存在则不做修改
    SETEX添加键值对,指定有效期
    GET根据 key 获取 value
    MSET批量添加多个 String 键值对
    MGET根据多个 key 获取多个 value
    INCR整数 key 自增 1
    INCRBY整数 key 自增并自定义步长
    INCRBYFLOAT浮点数 key 自增并自定义步长
  2. 使用建议:建议 SDS 长度小于 44 字节(因为 SDS < 44 byte 时会采用 EMBSTR 编码,采用连续内存空间,只需要申请一次内存,效率高)

  3. String 编码方式

    1. INT 编码:存储整数值且大小在 LONG_MAX 范围内,则直接将数据保存在 RedisObject 的 ptr 指针位置
    2. EMBSTR 编码:SDS 长度 ≤ 44 字节,RedisObject 和 SDS 申请连续内存空间,共 64 byte 大小,效率高
    3. RAW 编码:SDS 长度 > 44 字节,RedisObject 的 ptr 指针指向 SDS 独立内存空间(需要申请两次内存空间)

Hash 类型

  1. 定义:value 是一个无序字典,类似 Java 中的 HashMap

  2. 功能:针对单个字段 CRUD 很方便,因为对象中每个字段独立存储

  3. 常用命令

    ⭐HSET key field value添加或修改 key 的 field 字段值
    ⭐HGET key field获取 key 的 field 字段值
    HMGET批量查询多个 key 的 field 字段值
    HMSET批量添加多个 hash 类型 key 的 field 值
    HGETALL
    HKEYS
    HVALS
    HINCRBY
    HSETNX
  4. 编码方式

    1. ZipList 编码
      1. 节省内存空间,用连续的两个 entry 存储 key-value
      2. 要求元素个数 ≤ hash_max_ziplist_entires 个(默认512个),entry 大小 ≤ hash_max_ziplist_value 字节(默认64字节)

List 类型

  1. 定义:类似 Java 中的 LinkedList 类,可看做一个双向链表结构

  2. 功能:支持正向检索和反向检索

  3. 特点

    1. 有序
    2. 元素可以重复
    3. 插入删除快
    4. 查询速度一般
  4. 常用命令

    ⭐LPUSH key elem1 elem2 …向链表左侧插入一个或多个元素
    ⭐RPUSH key elem1 elem2 …向链表右侧插入一个或多个元素
    ⭐BLPOP & BRPOPBlock LPOP & Block RPOP,阻塞式获取,在没有元素时会等待指定时间
    LPOP key移除并返回列表左侧的第一个元素,没有则返回 nil
    RPOP key移除并返回列表右侧的第一个元素,没有则返回 nil
    LRANGE key start end返回一段 index 范围内的所有元素,-x 表示倒数第 x 个元素
  5. 底层数据结构:QuickList

    在这里插入图片描述


Set 类型

  1. 定义:类似 Java 中的 HashSet 类,key 是 set 的名字,value 是集合中的值

  2. 功能:快速获知 value 是否在当前 set 中

  3. 特点

    1. 无序
    2. 元素唯一
    3. 查找速度快
    4. 支持交集、并集、补集功能
  4. 常见命令

    SADD key member …添加元素
    SREM key member …删除元素
    SCARD key获取元素个数
    SISMEMBER key member判断一个元素是否存在于 set 中
    SMEMBERS获取 set 中所有元素
    SINTER key1 key2 …求 key1 和 key2 集合的交集
    SDIFF key1 key2 …求 key1 和 key2 集合的差集
    SUNION key1 key2 ….求 key1 和 key2 集合的并集
  5. 编码方式

    1. IntSet 编码:存储的所有数据都是整数,并且元素数量不超过 set-max-intset-entries 时,使用 IntSet 节省内存空间
    2. HT 编码:key 用来存元素,value 统一为 null

    在这里插入图片描述


SortedSet 类型(ZSet)

  1. 定义:有序的 set 集合,类似 Java 中的 TreeSet,每一个元素都有一个 score 属性用于排序

  2. 功能:排序且元素唯一,实现排行榜类似的功能

  3. 特点

    1. 可排序
    2. 元素不重复
    3. 查询速度快
  4. 常用命令

    ZADD key score member添加 member 元素及其 score 值,到 key 集合中
    ZREM key member删除 member 元素
    ZSCORE key member查询 member 元素的 score 值
    ZRANK key member查询 member 元素的排名
    ZREVRANK key member查询 member 元素倒序排名
    ZCARD key获取 sorted set 中的元素个数
    ZCOUNT key min max统计 score 值在给定范围内的元素个数
    ZINCRBY key increment member指定 member 元素自增,步长为 increment
    ZRANGE key min max查询指定 升序 rank 范围 内的元素(max为最大排名,min为最小排名)
    ZREVRANGE key max min查询指定 降序 rank 范围 内的元素(max为最大排名,min为最小排名)
    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]查询指定 升序 score 范围 内的元素 (min为最小score,max为最大score)
    LIMIT :条件查询 / offset:跳过的个数, 1则不含 max / num ; 的数据数量
    ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT]查询指定 降序 score 范围 内的元素 (min为最小score,max为最大score)
    LIMIT :条件查询 / offset:跳过的个数, 1则不含 max / num ; 的数据数量
    ZDIFF & ZINTER & ZUNION差集 & 交集 & 并集
  5. 编码方式

    1. ZipList 编码
      1. 用于实现排序功能 (手动实现排序) 并且减少内存消耗
      2. 需要根据 score 值手动实现排序功能,并通过连续存储 ele score 的方式实现键值存储
      3. 要求元素数量小于 zset_max_ziplist_entries 个,元素小于 zset_max_ziplist_value 字节
    2. SkipList 编码:用于实现排序功能,元素较多时 ZSet 会将 ZipList 编码转为 SkipList 编码
    3. Dict 编码:用于实现查找和元素唯一功能

    在这里插入图片描述


  • 30
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值