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的数据
快速列表
通过这种方式【数组链表】尽可能减少指针所占用的消耗
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 需要实现随机的插入和删除,所以不能用数组,但是链表又不能随机查找定位,因此引入跳跃链表
以这种方式来实现一个伪二分查找
zset (有序集合)。记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。
文章末尾请带上以下文字及链接:本文正在参与「掘金小册免费学啦!」活动, 点击查看活动详情