首页 > 数据库 >redis数据结构

redis数据结构

时间:2024-08-09 15:50:10浏览次数:13  
标签:HyperLogLog Redis 元素 redis Bitmaps 数组 数据结构

redis 数据类型

	string  list  hash  set   zset   HyperLogLog   GEO  BloomFilter(布隆过滤器)

HyperLogLog

基本概念:
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,所谓基数,也就是不重复的元素。
优点
在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。
缺点
因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
估算的值,可能存在误差
应用场景:
网页统计UV (浏览用户数量,同一天同一个ip多次访问算一次访问,目的是计数,而不是保存用户)
传统的方式是使用set保存用户的id,可以统计set中元素数量作为标准判断。
但如果这种方式保存大量用户id,会占用大量内存,我们的目的是为了计数,而不是去保存id。

GEO

基本概念:
在 Redis 3.2 版本中新增了一种叫 geo 的数据结构,它主要用来存储地理位置信息,并对存储的信息进行操作。
应用场景:
用于存储地理信息以及对地理信息作操作的场景。
例如:

  • 查看附近的人
  • 微信位置共享
  • 地图上直线距离的展示

BloomFilter(布隆过滤器)

基本概念:
一种数据结构,是由一串很长的二进制向量组成,可以将其看成一个二进制数组。既然是二进制,那么里面存放的不是0,就是1,但是初始默认值都是0。
主要作用是:判断一个元素是否在某个集合中。比如说,我想判断20亿的号码中是否存在某个号码,如果直接插DB,那么数据量太大时间会很慢;如果将20亿数据放到缓存中,缓存也装不下。这个时候用布隆过滤器最合适.
布隆过滤器是用于判断一个元素是否在集合中。通过一个位数组和N个hash函数实现。
优点:

  • 空间效率高,所占空间小。
  • 查询时间短。
    缺点:
  • 元素添加到集合中后,不能被删除。
  • 有一定的误判率
    底层实现:
    Redis提供的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。
    可以把Bitmaps想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量。单个bitmaps的最大长度是512MB,即2^32个比特位。
    BloomFilter(布隆过滤器)
    基本概念:
    一种数据结构,是由一串很长的二进制向量组成,可以将其看成一个二进制数组。既然是二进制,那么里面存放的不是0,就是1,但是初始默认值都是0。
    主要作用是:判断一个元素是否在某个集合中。比如说,我想判断20亿的号码中是否存在某个号码,如果直接插DB,那么数据量太大时间会很慢;如果将20亿数据放到缓存中,缓存也装不下。这个时候用布隆过滤器最合适.
    布隆过滤器是用于判断一个元素是否在集合中。通过一个位数组和N个hash函数实现。
    优点:
  • 空间效率高,所占空间小。
  • 查询时间短。
    缺点:
  • 元素添加到集合中后,不能被删除。
  • 有一定的误判率
    底层实现:
    Redis提供的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。
    可以把Bitmaps想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量。单个bitmaps的最大长度是512MB,即2^32个比特位。

标签:HyperLogLog,Redis,元素,redis,Bitmaps,数组,数据结构
From: https://www.cnblogs.com/sitting-on-the-clouds/p/18350848

相关文章

  • 数据结构之二叉树的顺序存储结构与链式存储结构
    一、顺序存储结构1.定义与特点顺序存储结构是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素。完全二叉树和满二叉树采用顺序存储比较合适,因为它们的结点序号可以唯一地反映结点之间的逻辑关系,从而既能最大地节省存储空间,又能利用数组元......
  • 如何关闭redis的自动清理缓存,声明式事务(含有redis)如何解决,redis setnx锁的使用。
    20240809一、解决redis数据被删除的方案1、发现问题2、解决注意!!二、声明式事务(当有redis的时候)1.先看代码2.@Transactional(rollbackFor=Exception.class)3.如何解决redis在事务里面,如何保证原子性和一致性3.1我们可以用trycatchfinally来实现3.2我们可以让red......
  • 问题 K: 数据结构基础11-图的深度优先遍历
    题目描述读入一个邻接矩阵存储的无向图,输出它的深度优先遍历序列。  输入第1行1个整数n,表示图中的顶点数,2<=n<=100接下来的n行是一个n*n的邻接矩阵,a[i][j]=1表示顶点i和顶点j之间有直接边相连,a[i][j]=0表示没有直接边相连,保证i=k时a[i][j]=0,且a[i,j]=a[j,i].输出输......
  • 25版王道数据结构课后习题详细分析 第三章栈、队列和数组 3.1 栈 选择题部分
    一、单项选择题————————————————————————————————————————解析:栈和队列的逻辑结构都是相同的,都属于线性结构,只是它们对数据的运算不同。正确答案:B————————————————————————————————————......
  • 浙大数据结构慕课课后题(03-树2 List Leaves)
    题目要求:给定一棵树,您应该按照从上到下、从左到右的顺序列出所有叶子。输入规格: 每个输入文件都包含一个测试用例。对于每种情况,第一行都给出一个正整数N(<=10),这是树中节点的总数--因此节点的编号从0到N-1.然后N行紧随其后,每行对应一个节点,并给出节点的左右子节点......
  • Redis笔记
    Redis(Remotedictionaryserver)开源的基于内存的数据存储系统可用于数据库、缓存、队列等各种场景。支持key-value的储存形式,底层是用C语言编写的。基于key-value形式的数据字典,结构非常简单,没有数据表的概念,之间用键值对的形式完成数据的管理。SQL NoSQL数据结构结构......
  • [数据结构] 划分树
    介绍划分树,一种数据结构,和线段树很像,常用来解决求区间第$k$小的问题,支持在线,但不支持修改,时间复杂度:建树$\Theta(n\logn)$+单次查询$\Theta(\logn)$,空间复杂度$\Theta(n\logn)$,在这种问题及其扩展问题上具有优良的性能,但其它问题就凸显出其局限性;思想划分......
  • docker 构建redis
    一、Docker搜索redis镜像dockersearchredis 二、Docker拉取镜像dockerpullredis 三、Docker挂载配置文件接下来就是要将redis的配置文件进行挂载,以配置文件方式启动redis容器。(挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容......
  • dockker部署redis报错(报:WARNING Memory overcommit must be enabled! Without it, a b
    转载博客(机翻):https://ourcodeworld.com/articles/read/2083/how-to-remove-redis-warning-on-docker-memory-overcommit-must-be-enabledHowtoremoveRediswarningonDocker:Memoryovercommitmustbeenabled如何删除Docker上的Redis警告:必须启用内存过量使用Carlos......
  • 数据结构之Map与Set(上)
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程(ಥ_ಥ)-CSDN博客所属专栏:数据结构(Java版) 目录二叉搜索树Map和Set的介绍与使用 Map的常用方法及其示例Set的常用方法及其示例哈希表 冲突-概念冲突-避免-哈希函数设计冲突-避免-负载因子调节......