redis中String,Hash类型用法与场景使用

String

用法

1.  设置键值对

(1)设置键值对使用 set 命令设置 key 的值。

返回值:ok,如果 key 已经存在,set 命令会覆盖旧值。

(2)使用 setex 命令设置 key 的值并为其设置过期时间(以秒为单位)。

返回值:ok

(3)使用 setnx 命令只在 key 不存在时设置其值。

返回值:1 - 成功,0 - 失败

(4)设置多个键值对使用 mset 命令同时设置一个或多个key-value对。

[] 表示可以多写,也可以不写,意思就是可以同时设置多个key-value对

2. 获取键值

使用 get 命令获取key的值。 

返回值:存在返回值,不存在返回nil

3. 数值操作

使用 incr、decr、incrby、decrby 等命令对key对应的整数值进行加、减操作。

返回值:返回加后的值

内部编码

1.  int:当存储的值为整数,且值的大小可以用long类型表示时,Redis使用int编码。 Redis启动时会预先建立10000个分别存储0到9999的redisObject变量作为共享对象。这意味着如果设置的字符串键值在0到10000之间,Redis可以直接指向这些共享对象,从而节省内存空间。

2. embstr:当存储的值为字符串,且长度大于某个阈值(不同资料中给出的具体数字可能有所不同,但常见的是39字节或44字节)时,Redis使用embstr编码。 embstr编码中,String对象的实际值会被存储在一个特殊的字符串对象中,该对象包含了字符串的长度和字符数组的指针,但是不包含额外的空间。 

3. raw:当存储的值为字符串,且长度超过embstr编码的阈值时,Redis使用raw编码。 raw编码是最基本的字符串表示方式,底层类似于Java中的byte数组。 raw编码在处理大字符串时具有较好的灵活性。

redis会根据当前值的类型和长度动态决定使用哪种内部编码实现。上述的阈值(如39字节或44字节)一般是可以根据实际的应用场景在redis的配置文件redis.conf中进行修改的。

使用场景

1. 作为缓存对象

将经常访问的数据(如用户信息、商品详情等)存储在Redis中,作为缓存使用,以减少对数据库的访问次数,提高系统性能。

2. 计数操作

利用Redis的原子性操作(如incr命令)来实现计数器功能,如网站的访问量、点赞数、评论数等。

3. 共享Session信息

在多应用或多服务器架构中,使用Redis存储用户Session信息,实现Session的共享和持久化。

4. 限制访问

限制一个用户只能在一个设备上登录,或者在发送短信时设置key的过期时长等。

5. 分布式锁

使用Redis的String类型结合 setnx 命令实现分布式锁,以确保在分布式系统中多个进程或线程对共享资源的互斥访问。


Hash

用法

redis 自身用的就是键值对(key-value),而使用 hash 类型用来存储的时候防止搞混,映射关系就为 field-value

1. 设置字段和值

(1)设置 hash 指定字段(field)的值(valueh)

[] 表示可以多写,也可以不写,意思就是可以同时设置多组键值对

返回值:设置成功的键值对的个数

 (2)在 key 不存在时设置其值。

2. 获取 flild / value

(1)获取 key 的 field 

返回值:存在返回值,不存在返回nil

(2)获取 key 的所有 fleid

先根据 key 找到对应的 hash,然后再遍历 hash

(3) 获取对应 key 中所有 field 的个数

返回值:个数

 (4)查询多个 value

(5)获取 key 所有 value

返回值:找到的 value

(6)获取 key 所有的 field 和 value

假设有两组 hash:key1 f1 111,key2 f2 222

返回值:(1)"f1" (2)"111"(3)"f2"(4)"222"

3. 判断 / 删除

(1)判断指定的 field 是否存在

返回值:1 - 存在,0 - 不存在

(2)删除 hash 中指定的 field

如果直接写 del key 会直接把所有的 key 删除

返回值:删除的个数

返回值:找到的 field

4. 数值操作

对值进行加/减

 

返回值:计算后的值

内部编码

1. iplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)且同时所有值都小于hash-max-ziplist-value配置(默认64字节)时,Redis会使用ziplist作为哈希的内部实现。 ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加好,但是读的比较慢(数据越多越慢)。

2. hashtable(哈希表):当哈希类型无法满足ziplist的条件时,Redis会使用hashtable作为哈希的内部实现。 hashtable的读写时间复杂度为O(1),提供了高效的键值对存储和访问能力。 Redis在内部会根据存储的数据类型和实际使用情况动态选择使用哪种编码方式,以达到性能和存储空间的最佳平衡。

hash-max-ziplist-entries和hash-max-ziplist-value可以在Redis的配置文件redis.conf中进行自己配置。

使用场景

1.用户信息存储

  • 存储用户的基本信息,如用户名、密码(通常是哈希后的密码)、邮箱、手机号等。
  • 可以用用户的唯一 ID 作为 key,将用户的其他信息存储在 Hash 中。

2. 购物车:

  • 对于电商网站,可以使用 Hash 来存储用户的购物车信息。
  • key 可以是用户的 ID,field 可以是商品的 ID,value 则是商品的数量或其他相关信息。

3. 缓存热点数据

  • 将频繁访问的、结构化的数据(如文章详情、商品详情等)存储在 Hash 中,以提高访问速度。
  • 当需要从数据库或其他慢速数据源中获取这些数据时,可以先检查 Redis 中是否存在缓存。

List,set,bitfield 等后面我会再总结出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/641696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短剧APP开发,短剧行业发展下的财富密码

今年以来,短剧市场展现出了繁荣发展的态势,成为了一个风口赛道。 短剧具有不拖沓、时长短、剧情紧凑等优势,顺应了当代人的生活,是当代人的“电子榨菜”。 短剧的快速发展同时也带动了新业态新模式的发展,短剧APP就是…

鸿蒙OS开发:【一次开发,多端部署】(一多天气)项目

一多天气 介绍 本示例展示一个天气应用界面,包括首页、城市管理、添加城市、更新时间弹窗,体现一次开发,多端部署的能力。 1.本示例参考一次开发,多端部署的指导,主要使用响应式布局的栅格断点系统实现在不同尺寸窗…

“等保测评与安全运维的协同:保障企业网络安宁

"等保测评与安全运维的协同:保障企业网络安宁"是一个涉及信息安全领域的重要话题。这里,我们可以从几个方面来探讨这个主题。 1. 等保测评(等级保护测评) 等保测评,即信息安全等级保护测评,是依…

WordPress 发布了独立的 SQLite 插件

之前 WordPress 在官方的 Performance Lab 插件实现 SQLite 模块,现在重构 SQLite 的实现,并且将其发布成一个独立的插件:SQLite Database Integration。 独立 SQLite 插件 最初的功能模块实现是基于 aaemnnosttv 的 wp-sqlite-db 插件修改实…

SEO优化,小白程序员如何做SEO优化流量从0到1

原文链接:SEO优化,小白程序员如何做SEO优化流量从0到1 1、SEO是什么? SEO即:搜索引擎优化(Search Engine Optimization),是一种通过优化网站结构、内容和外部链接等因素,提高网站在搜索引擎中的自然排名&…

某神,云手机启动?

某神自从上线之后,热度不减,以其丰富的内容和独特的魅力吸引着众多玩家; 但是随着剧情无法跳过,长草期过长等原因,近年脱坑的玩家多之又多,之前米家推出了一款云某神的app,目标是为了减少用户手…

Unity 自定义Web GL 发布模板

前言 使用讯飞语音识别时,发布Web GL 平台后需要在index.html 中添加相应的script 标签,但每次发布完添加比较麻烦,添加一个发布模板就可以不必每次发布完再手动添加修改。 实现 在Assets 文件夹下新建一个文件夹,重命名为WebG…

SpringCloud系列(22)--Ribbon默认负载轮询算法原理及源码解析

前言:在上一篇文章中我们介绍了如何去切换Ribbon的负载均衡模式,而本章节内容则是介绍Ribbon默认负载轮询算法的原理。 1、负载轮询算法公式 rest接口第N次请求数 % 服务器集群总数 实际调用服务器下标(每次服务器重启后rest接口计数从1开始…

分享:大数据风险检测报告,哪里查询比较好?

随着大数据技术的发展,逐渐被运用到各个领域,基于大数据技术的个人风险检测也就是我们常说的大数据报告在金融环境中运用的十分普遍,那大数据风险检测报告哪里查询比较好呢?本文就为大家简单介绍一下。 大数据风险检测报告查询能查到什么? …

超大Sql文件切分工具SQLDumpSplitter —— 筑梦之路

官网:PLB PLB - SQLSplitter 用于将大型MySQL转储拆分为可独立执行的小型SQL文件。 显示100%时并不是已经处理完了,而是才开始 优点 软件程序小巧,不需要安装,直接点击运行就可以最厉害的是SQLDumpSplitter可以自动将结构语句&…

基于放射组学的深度学习用于左心房CT图像中房颤亚型的分类

文章目录 Radiomics-Informed Deep Learning for Classification of Atrial Fibrillation Sub-Types from Left-Atrium CT Volumes摘要方法实验结果 Radiomics-Informed Deep Learning for Classification of Atrial Fibrillation Sub-Types from Left-Atrium CT Volumes 摘要…

多微信如何高效管理?一台电脑就能搞定!

对于有多个微信号的人来说,管理这些微信无疑是一道难题。 今天,就给大家分享一个能够让你高效管理多个微信号的神器——个微管理系统,下面,就一起来看看它都有哪些功能吧! 1、多号同时登录在线 系统支持多个微信号同…

EI数据库如何出具中文论文检索报告?

Ei Compendex数据库是全球最全面的工程检索二次文献数据库,它收录了7,000,000多篇论文的参考文献和摘要。这些论文出自5,000多种工程类期刊、会议论文集和技术报告。Ei Compendex收录的文献涵盖了所有的工程领域,其中大约22%为会议文献,90%的…

在线人才测评在企业招聘和大学生求职中的应用场景

每年的春招秋招,都是毕业生们忙着找工作的季节,相比社招来说,春招秋招是每个毕业生务必重视的机会,大厂名企毕竟名额有限,如果找到自己心仪的职业岗位,作为毕业生就必须提前准备,深入了解招聘的…

YOLOv8独家改进:mamba系列 | 视觉态空间(VSS)块结合C2f二次创新,提升捕捉广泛的上下文信息 | VMamba2024年最新成果

💡💡💡创新点:Mamba UNet采用了纯基于视觉Mamba(VMamba)的编码器-解码器结构,融入了跳跃连接,以保存网络不同规模的空间信息。这种设计有助于全面的特征学习过程,捕捉医学图像中复杂的细节和更广泛的语义上下文。我们在VMamba块中引入了一种新的集成机制,以确保编…

百度集团:AI重构,走到哪了?

内有自家公关一号“自曝”狼性文化,主动制造舆论危机。 外有,OpenAI、谷歌、字节、华为等大模型劲敌扎堆迭代新产品, 强敌环伺。 今天我们要说的是早就从BAT掉队的——百度。 最近,在武汉Aapollo Day 2024上,百度发布了…

[数据结构] -- 单链表

🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82)&#…

小红书云原生 Kafka 技术剖析:分层存储与弹性伸缩

面对 Kafka 规模快速增长带来的成本、效率和稳定性挑战时,小红书大数据存储团队采取云原生架构实践:通过引入冷热数据分层存储、容器化技术以及自研的负载均衡服务「Balance Control」,成功实现了集群存储成本的显著降低、分钟级的集群弹性迁…

ABB机器人---基础编程

目录 第一章 代码解释 1.1 基础代码 1.1.2 关于 VAR robtarget pos 1.1.3 关于四元数 1.2 机器人初始化程序 1.3 配置通信 (ProfiNet 示例,ABB RAPID) 1.4 设置干涉区 (ABB RAPID) 1.5 示教轨迹和自动过程 (ABB RAPID) 1.6 配置抓手并进行抓取操作 (ABB RA…

[WUSTCTF2020]funnyre

ida打开 mian 函数 不能反汇编,往下翻有一处报红,一看是花指令,还怪长,报红的都nop后,全选按P重新生成函数 三百多个变量,也是不太可能一个个去解了,刚好前两天简单练了一下 angr (…