Redis 初探| 小册免费学

180 阅读3分钟

Redis是什么? 缓存。

然后呢

不会

Redis基础数据结构

Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。不同类型的数据结构的差异就在于 value 的结构不一样。

string (字符串)

字符串结构使用非常广泛,一个常见的用途就是缓存用户信息。我们将用户信息结构体使用 JSON 序列化成字符串,然后将序列化后的字符串塞进 Redis 来缓存。同样,取用户信息会经过一次反序列化的过程。

什么是序列化

  • 序列化:把Java对象转换为字节序列的过程。
  • 反序列化:把字节序列恢复为Java对象的过程。

用途

  • 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象)
  • 在网络上传送对象的字节序列。(网络传输对象)

transient关键字

字符串扩容机制

小于1M时,capacity >> 1 否则 ++;

list

python不同,list不是数组而是链表,不能随机访问

但是插入删除比较快,常用作异步队列使用,一边将任务序列化放入链表中,一边从这个列表中按顺序读取数据操作。

慢操作 lindex:get(index)

ltrim:保留i,j的数据

lrange:输出i,j的数据

快速列表

image.png

通过这种方式【数组链表】尽可能减少指针所占用的消耗

list (列表) 记录帖子的相关文章 ID,根据内容推荐相关帖子 (list)

hash

数组加链表的底层实现(拉链法的哈希),但value只能是字符串

渐进式rehash

渐进式 rehash 会在 rehash 的同时,保留新旧两个 hash 结构,查询时会同时查询两个 hash 结构,然后在后续的定时任务中以及 hash 操作指令中,循序渐进地将旧 hash 的内容一点点迁移到新的 hash 结构中。当搬迁完成了,就会使用新的hash结构取而代之。

当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收。

通过hash存储用户信息时,可以只获取部分。

hash (哈希) 记录帖子的点赞数、评论数和点击数 。

set

它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值NULL。

可以存储获奖用户的id,不会重复

zset

它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权重。它的内部实现用的是一种叫做「跳跃列表」的数据结构。

内部 score 使用 double 类型进行存储,所以存在小数点精度问题

zset 需要实现随机的插入和删除,所以不能用数组,但是链表又不能随机查找定位,因此引入跳跃链表

image.png

以这种方式来实现一个伪二分查找

zset (有序集合)。记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。

文章末尾请带上以下文字及链接:本文正在参与「掘金小册免费学啦!」活动, 点击查看活动详情