百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis的各种数据结构以及合理使用

mhr18 2024-11-10 09:46 23 浏览 0 评论

Redis的底层数据结构

  • 简单动态字符串sds(Simple Dynamic String)
  • 双端链表(LinkedList)
  • 字典(Map)
  • 跳跃表(SkipList)

redis各种数据类型使用的数据结构

  • String, SDS(simple dynamic string) 简单动态字符串, 包含len(字符串长度), free(空闲的字节数量), buf(字节数组,存储数据)
  • List, 使用压缩列表(数据集比较少的时候, 列表中单个数据小于64字节或者列表中数据个数少于512个)和双向循环链表, 包含pre, next, value
  • hash, 使用压缩列表(键和值的大小小于64字节, 列表中键值对个数小于512个)和散列表
  • Set, 有序数组(个数不超过512)和散列表
  • Zset, 压缩列表(数据小于64字节或者个数小于128个)和跳跃表

用ziplist代替key-value减少80%内存占用的案例

背景: 因业务原因, 需要大量存储key-value数据, key和value都为string, 如果存储1千万条数据,占用了redis共计1.17G的内存. 当数据量变成1个亿时,实测大约占用8个G. 但是修改为key(int), value 为ziplist时, 内存占用为123M, 减少了85%.

步骤:

  1. 要将1千万个键值对, 放到N个bucket中, 但是为了防止ziplist变为hashtable, 每个bucket不能超过512个键值对, 1千万 / 512 = 19531. 将所有key hash到所有bucket中, 但由于hash函数的不确定性, 可能出现不均等分配, 可以分配25000个bucket, 或者30000个bucket.
  2. 选用hash算法, 决定将key放到哪个bucket. 这里我们采用高效而且均衡的知名算法crc32. 通过获取原有md5(key)的crc32后, 再对bucket的数量进行取余.
  3. 第2步确定了外层的key, 内部的field我们选用bkdr哈希算法. public static int BKDRHash(String str) {
    int seed = 131;
    int hash = 0;
    for (int i = 0; i < str.length; i++) {
    hash = (hash * seed) + str.charAt(i);
    }
    return (hash & 0X7FFFFFFF);
    }
  4. 测试装入1000万条数据, 内存降低了85%; 查询测试, 查100万条数据, 对比查询速度: key-value耗时:10653、10790、11318、9900、11270、11029毫秒 hash-field耗时:12042、11349、11126、11355、11168毫秒

相关推荐

渗透中值得关注的不常见的敏感扩展名综合指南,收藏夹吃灰专用

在进行渗透测试或数据安全评估时,除了常规的.config、.xml、.sql、.bak等文件,还存在许多不常见但可能包含极高价值敏感信息的文件。以.psc(Navicat数据库备份压缩文件)为...

美创安全实验室 | 三大数据库写入WebShell的姿势总结

WebShell作为黑客常用来提权的工具,通常出现在存在任意文件上传漏洞的网站中,但如果遇到一个没有任何的上传点的网站,想通过文件上传漏洞获得权限显然就行不通了,但所谓"山穷水尽疑无路、柳暗花...

Java面试必备八股文(java面试必备八股文pdf下载)

Java基础1.Java的特点面向对象平台无关性(JVM实现)健壮性(自动内存管理、异常处理)多线程支持安全性2.Java基本数据类型8种基本类型:整型:byte(1),short(2),in...

嵌入式ADC驱动框架:通道控制 + 数据读取全流程剖析

一个嵌入式操作系统或驱动框架中的ADC(模拟数字转换器)驱动模块,用于管理ADC通道的配置、读取、启停等功能。以下是对各部分的详细解读:一、基本结构和宏控制#ifdefMR_USING_AD...

40亿QQ号,不超过1G内存,如何去重?

分享一道网上很火的面试题:40亿QQ号,不超过1G的内存,如何去重?这是一个非常经典的海量数据去重问题,并且做了内存限制,最多只能1GB,本文跟大家探讨一下~~一、常规思路我们日常开发中,如果谈到去重...

PS各个工具的作用及用法(ps中各个工具的用途及使用方法)

PS各个工具的作用及用法1.移动工具,可以对PHOTOSHOP里的图层、照片进行移动。2.选框工具,负责建立形状的选区,可以用来抠图。只有选区内的图像可以修改。(1)矩形选择工具,可以对图像选一个矩形...

PS中常用图片的格式(ps中常用图片的格式是什么)

PhotoshopCC支持多种文件格式,如TIFF、GIF、JPEG等,文件格式决定了图像数据的存储方式以及文件是否与一些应用程序兼容。使用【存储】或者【存储为】命令保存文件时,可以在弹出的对话框...

浅析 BMP 位图(bmp位图是什么意思)

1、BMP是什么?BMP是Bitmap(位图)的简称,是windows显示图片的基本格式。在windows下,任何格式的图片文件(包括视频播放)都要转化为位图才能显示出来,各种各样格式的图片文件也都...

ClickHouse在自助行为分析场景的实践应用

一、自助分析场景OLAP技术选型1.1背景1.2OLAP选型考量1.3ClickHouse二、高斯平台自助分析场景2.1系统介绍2.2系统架构2.3ClickHouse在高斯平台的业务场景...

PostgreSQL 模糊查询优化(全模糊、忽略大小写优化)

模糊查询是数据库系统中非常常见的一种操作,比如查找用户名、邮件、用户地址、电话等等。我们知道前缀匹配(LIKExx%)是可以走索引的,但是全模糊(LIKE%xx%)就无法走索引,甚至忽略大小写等这...

Java手写一个bitmap(java怎么写)

位图(Bitmap)是一种高效的,使用位来记录数据的结构,多用于存储和操作大量布尔值(通常是true或false)。位图通过使用位(bit)来表示布尔值,从而节省存储空间并提高操作效率。位(Bit):...

位图(Bitmap)管理在驱动与资源分配中的应用

位图(Bitmap)管理在驱动与资源分配中的应用在驱动开发与资源分配的领域中,高效的资源管理方式至关重要。位图(Bitmap)管理凭借其独特的优势,成为了开发者们手中的得力工具。接下来,让我们深入探究...

Oracle 11g数据库数据仓库模式与一般事务处理模式

在Oracle11g数据库安装过程中,数据仓库模式与一般事务处理模式(OLTP)是针对不同业务场景设计的两种架构方案,其核心区别体现在应用场景、数据结构、性能优化方向等多个维度。以下是具体对比:一...

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

取消回复欢迎 发表评论: