首页 > 数据库 >Redis数据类型与实现结构

Redis数据类型与实现结构

时间:2024-07-08 23:31:51浏览次数:15  
标签:存储 数据类型 Redis 字符串 集合 结构

Redis 提供了多种数据类型,每种数据类型都有其独特的实现结构和使用场景。以下是 Redis 中常见的数据类型及其底层实现结构:

  1. 字符串(String)

    • 字符串是最基本的数据类型,可以存储二进制安全的字符串、整数或浮点数。
    • 实现结构:Redis 使用 SDS(Simple Dynamic String)结构来存储字符串,这是一种类似于 C 语言字符串的结构,但 SDS 优化了解决C字符串的一些缺陷,如长度信息预存储,减少多次操作时的内存重分配等。
  2. 列表(List)

    • 列表是一个有序的字符串集合,可以在列表的两端进行高效地插入和删除操作。
    • 实现结构:列表由多个 quicklist(快速列表)组成,而 quicklist 本质上是一个双向链表,每个节点包含一个 ziplist(压缩列表),从而实现了空间和时间复杂度的平衡。
  3. 哈希(Hash)

    • 哈希是一个键值对的集合,可以在一个哈希数据结构中存储多个字段和值。
    • 实现结构:哈希使用 ziplist 或 hashtable(散列表)来存储数据,取决于元素的数量和大小。当元素数量较少且较小的时候,Redis 使用 ziplist,反之则使用 hashtable
  4. 集合(Set)

    • 集合是一个无序的唯一值的集合,支持集合间的交集、并集和差集操作。
    • 实现结构:集合使用 intset(整数集合)或 hashtableintset 用于存储整数值,且当集合中的所有元素都可以表示为整数时使用,以节省空间;否则使用 hashtable
  5. 有序集合(Sorted Set)

    • 有序集合类似于集合,但每个成员都关联着一个分数(score),可以根据分数对成员进行排序,同时保持唯一性。
    • 实现结构:有序集合使用 skiplist(跳跃表)和 hashtable 结构。skiplist 用于按分数排序和查找,而 hashtable 用于存储成员和分数的映射。
  6. 位图(Bitmaps)

    • 位图是一种按照单个位进行操作的字符串类型,常用于活跃用户统计、用户签到功能等。
    • 实现结构:位图在 Redis 中实际上就是一系列的比特位,存储在字符串类型中,每个比特位可以表示一个元素的存在与否。
  7. HyperLogLog

    • HyperLogLog 是一种用于近似计算不同元素个数(基数)的算法,添加元素时只记录元素个数,不存储元素本身,节省空间并避免重复计数。
    • 实现结构:HyperLogLog 使用概率数据结构来估计基数,存储空间非常小,适用于需要大量数据的统计场景。
  8. GeoSpatial Indexes

    • 地理空间索引用于地理位置查询,如两点之间的距离、一个点附近有多少元素等。
    • 实现结构:地理空间索引在内部使用 sorted set 结构,其中每个元素的 score 代表经纬度的编码值,从而可以利用 sorted set 的范围查询能力来进行地理空间查询。

标签:存储,数据类型,Redis,字符串,集合,结构
From: https://www.cnblogs.com/use-D/p/18290882

相关文章

  • 【Redis 理论与实践学习】 一、Redis的数据结构:4.Set类型
    文章目录简介Set和List的区别常用命令增删改查类命令添加元素移除元素判断元素是否存在获取集合大小获取集合所有成员随机获取元素随机移除并返回元素运算操作命令集合间操作集合间操作并存储应用场景博客点赞用户点赞操作公众号共同关注用户关注集合共同关注查询......
  • redis学习笔记
    redis笔记1.Redis是什么?Redis(RemoteDictionaryServer)是一个使用C语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作......
  • Redis事务
    001-redis事务 (1)Redis事务的概念: Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 总结说:redis事务就是......
  • 【Javascript】微信小程序项目结构目录详解
    我白天是个搞笑废物表演不在乎夜晚变成忧伤怪物撕扯着孤独我曾经是个感性动物小心地感触现在变成无关人物                     ......
  • Redis安全
    Redis安全一、账号密码端口安全1)账号密码安全。configgetrequiespass检查是否设置有密码,设置密码:CONFIGsetrequirepass"runoob"配置文件:#requirepassfoobared2)网络配置配置文件:bind192.168.1.100 #Redis服务器只监听本地网络接口,只有本机可以访问Redis服务器......
  • Vue2和Vue3区别的理解和学习1-API结构
    API结构Vue2采用选项式API,包括data、methods、mounted等,而Vue3则引入了组合式API,主要使用setup函数。这种变化使得代码组织更加模块化,更易于复用和维护。选项式API(OptionsAPI)包含多个选项的对象来描述组件的逻辑。选项所定义的属性都会暴露在函数内部的this上,......
  • Redis核心问题总结(二)
    统计高并发网站每个网页每天的UV数据,结合Redis你会如何实现?选用方案:HyperLogLog如果统计PV那非常好办,给每个网页一个独立的Redis计数器就可以了,这个计数器的key后缀加上当天的日期。这样来一个请求,incrby一次,最终就可以统计出所有的PV数据。但是UV不一样,它要去......
  • C++ 项目目录结构
    project_root/├──src/#源代码目录│├──main.cpp#主函数文件│├──MyClass.cpp#类的实现文件│└──...#其他源文件│├──include/#头文件目录│├──MyClass.h#类的头......
  • redis如何与mysql数据保持一致?
    redis如何与mysql数据保持一致?同步双写:cacheasidepattern,读:先读缓存再读数据库,一个缓存的过期时间,实现起来简单好用极限情况还会有数据不一致的风险。CAP定理:c一致性a可用性p分区容错性,cp或者是ap异步双写:基于消息队列实现,写:生产者:先更新数据库,向队列发消息,消费者:监听消......
  • 在CentOS 7虚拟机上正确安装Redis
    在CentOS7虚拟机上正确安装Redis,可以按照以下步骤进行操作:更新系统软件包:sudoyumupdate安装Redis依赖库:sudoyuminstallepel-releaseyum-utilssudoyuminstallhttp://rpms.remirepo.net/enterprise/remi-release-7.rpmsudoyum-config-manager--enableremisudoyu......