当前位置: 首页 > article >正文

Redis - 数据类型与编码方式

Redis中常用的5种数据类型

包括字符串、哈希、列表、集合、有序集合

  • 字符串,相当于Java中的String
  • 哈希,相当于Java中的HashMap
  • 列表,相当于Java中的List
  • 集合,相当于Java中的Set
  • 有序集合,多存储了一个权重

Redis承诺使用上述数据结构进行操作的时间复杂度与我们所知道的哈希表、字符串等是一致的,但是内部实现这些数据结构不一定是哈希表、字符串等

编码方式

字符串

字符串包括raw、int、embstr3种编码方式

  • raw:就是最基本的字符串(底层使用一个字节数组存储)
  • int:当value是一个整数时,Redis可能会使用int来保存字符串
  • embstr:针对短字符串进行的特殊优化

这些编码方式是自适应的,我们使用Redis时感知不到

哈希表

哈希表的编码方式包括hashtable、ziplist

  • hashtable:最基本的哈希表
  • ziplist:压缩列表,在哈希表中元素比较少的时候,会优化成ziplist,能够节省空间

列表

编码方式有:linkedlist、ziplist

  • linkedlist:链表
  • ziplist:压缩列表

Redis3.2版本开始引入了quicklist(同时兼顾linked和ziplist的优点,可以理解为,quicklist是一个链表,每个元素是一个ziplist)

集合

编码方式:hashtable、intset

  • hashtable:哈希表
  • intset:整数集合(如果集合中的数全是int类型的,会优化成intset)

有序集合

编码方式:skiplist、ziplist

  • skiplist:跳表,特殊的链表,查询的时间复杂度是O(logN)
  • ziplist:压缩列表

使用命令查看key对应的value的编码方式

语法如下

object encoding key

在这里插入图片描述

Redis单线程模型

Redis只使用一个线程处理所有的命令请求(并不是说一个Redis服务器进程内部只有一个线程,还有其他线程处理其他的事情),所以当多个请求同时到达服务器,不会产生线程安全问题

那么,为什么Redis是单线程的速度还这么快?(前提是和MySQL等关系型数据库比较)

原因:

1、Redis访问的是内存,数据库访问的是硬盘

2、Redis核心功能比数据库的核心功能更简单,只是针对key进行操作,而数据库会有更多复杂的操作

3、Redis单线程模型避免了线程竞争的开销

4、处理网络IO的时候,使用了IO多路复用机制(一个线程管理了多个Socket)


http://www.kler.cn/a/515842.html

相关文章:

  • 客户案例:向导ERP与金蝶云星空集成方案
  • 【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾
  • Picsart美易照片编辑器和视频编辑器
  • leetcode 121. 买卖股票的最佳时机
  • 线性表-线性存储结构
  • Saas Paas Iaas服务区别
  • 埃氏算法C++实现: 快速输出质数( 素数 )
  • 免费开源的三维建模软件Blender
  • ThinkPHP 8请求处理-获取请求对象与请求上下文
  • 网络打印机的搜索与连接(一)
  • 设计模式的艺术-享元模式
  • 【Elasticsearch】HNSW
  • 鸿蒙模块概念和应用启动相关类(HAP、HAR、HSP、AbilityStage、UIAbility、WindowStage、window)
  • 无人机图传模块:深入理解其工作原理与实际效用
  • 【Spring Boot】Spring原理:Bean的作用域和生命周期
  • 使用傅里叶变换进行图像边缘检测
  • 华为小米vivo向上,苹果荣耀OPPO向下
  • Haskell语言的区块链
  • Kotlin语言的数据结构
  • 大数据学习(40)- Flink执行流
  • 【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因
  • 如何在WordPress中轻松创建Mega菜单
  • MySQL分区表:万字详解与实践指南
  • 码随想录算法训练营Day13 | 二叉树的各种遍历
  • Android设备:Linux远程lldb调试
  • Avalonia:C# 跨平台桌面应用的优秀选择