蔡不菜和他的uU们

  • 首页
  • 新鲜出炉
  • 我的记录
  • 我的动态
  • 我和uU
  • 好用分享
  • 关于与留言
志合者,不以山海为远;道乖者,不以咫尺为近
  1. 首页
  2. 学习,学习
  3. 正文

Redis系列 — 常用五大数据类型

2022年11月30日 62人阅读 0人点赞 0条评论

string 字符串、List 列表、Set 集合、Hash 哈希、Zset 有序集合、

String

Redis 基本数据类型,
value 最多可达 512M
二进制安全,意味着Redis 的string 可以包含任何数据,比如 jpg图片 或者 序列化的对象

常用命令

  • set key value 设置相同的key 会覆盖之前的
  • get key
  • append key value 将value 追加到 原值的末尾
  • strlen key 获得值的长度
  • setnx key value 无法设置已经存在的key
  • incr key 将 key 中存储的数字值 加1
  • decr key 将 key 中储存的数字值 减1
  • incrby key 步长 将 key 中存储的数字值 增加指定 步长
  • decrby key 步长 将 key 中存储的数字值 减少指定 步长

incr 是原子性操作

  • mset key1 value1 key2 value2 ... 同时设置一个或多个 key-value

  • mget key1 key2 key3 ... 同时取多个 key的value

  • msetnx key11 value11 key22 value2 ... 设置的 key 不存在

  • getrange key 起始位置 结束位置

  • setrange key 起始位置 结束位置

  • setex key 过期时间 value 设置键值的同时 设置过期时间 单位秒

  • getset key value 设置新值同时获得旧值

数据结构

简单动态字符串 simple dynamic string 可以修改的字符串 内部机构类似于 Java ArrayList

image-20220704170239055

List

单键 多值

底层实际是个 双向链表 对两端的操作性能很高 通过索引下标的操作中间的节点性能会比较差

常用命令

  • lpush/rpush key value1 value2 value3 ... 从左边或右边 插入一个或多个值

  • lpop / rpop key 从左边/右边吐出一个值 。 值在键在 值光键亡

  • rpoplpush key1 key2 从key1右边吐出一个值加到key2左边

  • lrange key start end 按照索引取 0 左边第一个 -1 右边第一个

lrange mylist 0 -1 取出所有

  • lindex key index 按照索引下标获得元素 从左到右
  • llen key 获得列表长度
  • linsert key before/after value newvalue 在value的前面或后面插入 newvalue 插入值
  • lrem key n value 从左边删除 n 个 value 从左到右
  • lset key index value 将列表 key 下标为index 的值替换成 value

数据结构

List 的数据结构为快速链表 quickList

数据很少的话 找一块连续的内存空间 这个结构是 ziplist

数据很多的话 ziplist 被链接起来

因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表存的是 int类型的数据,结构上还需要两个额外的指针 prev next

Redis 将链表 和 ziplist 结合起来组成了 quicklist,也就是将多个 ziplist 使用双向指针串起来使用,既满足了快速的插入删除性能,又不会出现太大的空间冗余

Set

特殊之处在于,自动排重的,

无序集合 底层是 value为null的hash表

常用命令

  • sadd key value1 value2 将一个或多个member 加入 集合key中,已经存在的member 元素将被忽略
  • smembers key 取出该集合的所有值
  • sismember key value 判断集合 key 是否为含有该value 值 有 1 没有0
  • scard key 返回集合的元素个数
  • srem key value1 value2 删除集合中的某个元素
  • spop key 随机取出一个值
  • srandmember key n 随机从该集合中取出n个值,不会从集合中删除
  • smove sourcekey destinationkey value 从souce 移动 value 到 desination
  • sinter key1 key2 交集
  • sunion key1 key2 并集
  • sdiff key1 key2 差集

数据结构

Set 数据结构是dict 字典,字典是用哈希表实现的

内部使用hash结果 所有value都指向一个值

Hash

Redis hash 是一个 键值对集合

Redis hash 是一个 string 类型的field 和 value的映射表,hash 特别适合用于存储对象

两种存储方式

image-20220704175327110

第三种

image-20220704175704507

常用命令

  • hset key field value
  • hget key field
  • hmset key field1 value1 field2 value2 ... 同时设置多个
  • hexists key field 判断 field是否存在
  • hkeys key 查看所有field
  • hvals key 查看所有field对应的值
  • hincrby key field increment 增加
  • hsetnx key field value 仅当 field不存在时可以添加

数据结构

Hash类型对应的数据结构是两种 ziplist hashtable

当field-value 长度较短 且个数较少时,使用ziplist 否则使用 hashtable

Zset

Redis 有序集合 zset 与 普通集合 set 非常相似 是一个 没有重复元素的字符串集合

不同之处是有序集合的每个成员你都关联了一个 评分 score 这个 score 被用来按照从最低分到最高分的方式排序集合中的成员

集合的成员是唯一的,但是 评分可以是重复的

元素是有序的,所以可以很快根据评分 score 或者 position 来获得一个范围的元素

访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表

常用命令

  • zadd key score1 value1 score2 value2 ... 将一个或多个 member 元素 及其 score 值加入到有序集合key当中

  • zrange key start end [withscores] 返回有序集合 key 中 下标 在start end 之间的元素 带 withscores 可以让分数一起返回

  • zrangebyscore key minmax [withscores] [limit offset count] 返回有序集合key 中 所有score值介于min 和 max 之间 包括等于 min 或 max 的成员 有序集成员按 score 值递增 从小到大 次序排列

  • zrevrangebyscore key max min [withscores] [limit offset count] 同上 区别从大到小排列

  • zincrby key increment value 为元素的score加上增量

  • zrem key value 删除该集合下 指定的value

  • zcount key min max 统计该集合,分数区间内的元素个数

  • zrank key value 返回该值在集合中的排名 从0开始

案例 如何利用zset 实现一个文章访问量的排行榜

数据结构

sortedset 是 redis 提供的一个特别的结构,一方面它等价与Java 的数据结构 Map<String,Double> 可以给每一个元素 Value 赋予一个权重,另一方面它又类似于TreeSet,内部的元素按照权重score 进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表

使用了两个数据结构

(1)hash hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值

(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表

标签: redis
最后更新:2022年11月30日

Csy

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

取消回复
文章目录
  • String
    • 常用命令
    • 数据结构
  • List
    • 常用命令
    • 数据结构
  • Set
    • 常用命令
    • 数据结构
  • Hash
    • 常用命令
    • 数据结构
  • Zset
    • 常用命令
    • 数据结构

COPYRIGHT © 2021 caibucai.top. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

豫ICP备2021018055号