Redis数据类型

1. Redis介绍

  1. Redis是基于内存数据存储的,常被用于作为数据库、缓存等,Redis所有的数据都是存在内存中。
  2. 存在内存中的好处:读写块;缺点:断电立即消失
    因此可以了解下Redis的持久化机制,持久化就是将内存中的数据定期写入磁盘中。
  3. Redis数据库的特点
    ①高性能Key/Value内存型数据库
    ②支持丰富的数据类型
    ③支持持久化,内存数据持久化到硬盘中
    ④单进程,单线程,线程安全,效率高

问:Redis是单线程为什么还这么快?
答:1. Redis是纯内存操作,执行速度非常快;
2. 采用单线程,避免不必要的上下文切换可竞争条件,多线程还需要考虑线程安全问题;
3.使用I/O多路复用模型 ,非阻塞IO,因为Redis是纯内存操作,执行速度非常快,Redis的性能瓶颈是网络延迟,而不是执行速度,I/O多路复用模型主要就是实现了高效的网络请求。
I/O多路复用是利用单个线程来同时监听多个socket,可以避免无效的等待,提高网络性能。

2. Redis数据类型

2.1 String类型(字符串)

常见使用场景是存储Session信息、存储缓存信息(如详情页的缓存)、存储整数信息,可使用incr实现整数+1,使用decr实现整数-1。

2.2 List类型(列表类型)

常见使用场景是实现简单的消息队列,存储某项列表数据。、
list相当于Java中list集合,元素有序而且可以重复。

2.3 Hash类型(哈希表)

常见使用场景是存储Session信息、存储商品的购物车,购物车非常适合用哈希字典表示,使用人员唯一编号作为字典的key,value值可以存储商品的id和数量等信息、存储详情页信息。

2.4 Set类型(集合)

一个无序并唯一的键值集合,它常见使用场景是实现关注功能,比如关注我的人和我关注的人,使用集合存储,可以保证人员不会重复。
set集合,元素无序,不可以重复。

2.5 ZSet类型(Sorted Set 有序集合)

相比于Set集合类型多了一个排序属性score(分值),它的常见使用场景是可以用来存储排名信息、关注列表功能,这样就可以根据关注实现排序展示。
有序列表Sorted Set 也被称为ZSet,原因是有序列表的底层数据库实现是zskiplist(跳跃表)

3. 跳跃表

  1. 跳跃表是一种数据结构,用于在有序元素的集合中进行高效的查找操作。
  2. 跳跃表是由多个链表来实现的。
  3. 跳跃表的每一层都是原始链表的一个子集,最底层是一个完整的有序链表,包含所有元素。每个更高层都是下层级的子集。
  4. 跳跃指针,跳跃表通过添加额外的指针跳过一些元素,它们允许快速访问更远的节点,从而减少了查找所需的比较次数。
  5. 跳跃表的平均查找时间复杂度为O(logn),其中n是元素的数量,这使得跳跃表比普通的有序链表有着更快的查找性能,并且比平衡二叉搜索树的实现也更简单。

3.1 有序集合的底层实现

  1. 当数据比较少的时候,有序集合使用压缩列表ziplist实现的,反正为跳跃表skiplist实现。
    使用压缩列表存储必须满足2个条件:
    ①有序集合保存的元素小于128个;
    ②有序集合保存的所有元素的长度必须小于64个字节
    如果不能满足以上两个条件中的任意一个,有序集合将会使用跳跃表skiplist结果进行存储。
  2. 压缩列表的本质上是一个字节数组,比较节省空间。

3.2 跳跃表的图示

跳跃表的层数是随机的,如果不是随机的话,那我添加一个元素,则上面的层都没用了。
在这里插入图片描述

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeKnightShuai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值