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 等后面我会再总结出来。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全设计 | CISA:构建不可侵犯的代码,软件安全设计的未来之路

软件制造商在产品设计和开发过程中应采取安全设计原则和方法,以减少网络安全风险,并转变责任重心,使产品在设计时就内置安全特性,而不是依赖于后期的补丁和修复。为此CISA发布了《软件安全设计的原则和方法》,帮助软件…

兵器室管控系统|DW-306是一套成熟系统

概述 智慧兵器室管理系统(DW-S306)是依托互3D技术、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 本解决方案利用现有内部网络,部署部队智能兵器室管理系统&#xff…

【Java】欸...?我学集合框架?真的假的?

【Java】欸…?我学集合框架?真的假的? Java集合框架 概述 Java集合框架主要由以下几个部分组成: 接口(Interfaces):定义了集合的基本操作,如添加、删除、遍历等。实现&#xff0…

大语言模型的工程技巧(二)——混合精度训练

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 混合精度训练的示例请参考如下链接:regression2chatgpt/ch11_llm/gpt2_lora_optimum.ipynb 本文将讨论如何利用混合…

Java语法篇-易错

文章目录 类型转换switch case类之间关系及UMLtry catch finally 类型转换 隐式类型转换,不同数值类型参与计算时,低精度会转化为高精度参与运算 byte,short,char参与整数运算时会转成int float,int 参与浮点数运算时会转成double 强制类型转换 高精…

数据结构 —— 栈 与 队列

1.栈 1.1栈的结构和概念 栈(Stack)是一种特殊的线性数据结构,它遵循后进先出(LIFO,Last In First Out)的原则。栈只允许在一端插入和删除数据,这一端被称为栈顶(top)&a…

c++引用和内联函数

一、引用 1.引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。(引用类型必须和引用实体是同种类型的),如&#x…

MySQL--联合索引应用细节应用规范

目录 一、索引覆盖 1.完全覆盖 2.部分覆盖 3.不覆盖索引-where条件不包含联合索引的最左则不覆盖 二、MySQL8.0在索引中的新特性 1.不可见索引 2.倒序索引 三、索引自优化--索引的索引 四、Change Buffer 五、优化器算法 1.查询优化器算法 2.设置算法 3.索引下推 …

2024年NGFW防火墙安全基准-防火墙安全功效竞争性评估实验室总结报告

Check Point 委托 Miercom 对 Check Point 下一代防火墙 (NGFW) 开展竞争性安全有效性测试, 选择的竞品分别来自 Cisco、Fortinet 和 Palo Alto Networks。对 Zscaler 的测试涉及他们的 SWG(安全网关)。测试内容包括验证防病毒、反恶意软件、…

SpringBoot+Vue开发记录(六)-- 后端配置mybatis

原型图什么的就先不管,后面再写。 本篇文章的主要内容就是springboot通过mybatis操作数据库实现增删改查。 重点是mybatis配置与相关文件数据,以后开新项目忘记了怎么配置的话可以再照着这个搞。 这算是最基础的部分了吧。 文章目录 一,配置…

基于STM32的自动宠物喂食器的Proteus仿真

文章目录 一、宠物喂食器1.题目要求2.思路2.1 OLED显示汉字2.2 DS1302模块2.3 液位传感器2.4 压力传感器和步进电机驱动 3.仿真图3.1 未仿真时3.2 开始仿真,OLED初始界面显示实时时间3.3 通过设置按键进入模式选择和喂食时间设置3.4 进入喂食时间设置3.5 设置好喂食…

计算机毕业设计Python+Spark+PyTroch游戏推荐系统 游戏可视化 游戏爬虫 神经网络混合CF推荐算法 协同过滤推荐算法 steam 大数据

毕业设计(论文) 基于SpringBoot的游戏防沉迷系统的设计与实现 摘 要 随着网络游戏市场的持续火爆,其最明显的负面影响----“网络游戏沉迷问题”已成为当前社会普遍关心的热点问题。根据2010年8月1日实施的《网络游戏管理暂行办法》,网络游…

图书管理系统——Java版

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:JavaSE 顺序表的学习,点我 目录 图书管理系统菜单 基本框架: 书: 书架: 用户&#xff…

数字化转型必备:营销策划流程图,打造你的数字市场地图

制作营销策划流程图是一个系统化的过程,它可以帮助你清晰地规划和展示营销活动的各个阶段。 以下是制作营销策划流程图的步骤: 1.确定营销目标: 明确你的营销活动旨在实现的具体目标,比如提升品牌知名度、增加销售额、吸引新客…

Java进阶学习笔记25——Objects类

为啥比较两个对象是否相等,要用Objects的equals方法,而不是用对象自己的equals方法来解决呢? Objects: Objects类是一个工具类,提供了很多操作对象的静态方法供我们使用。 package cn.ensource.d14_objects;import ja…

Hadoop概览以及编译hadoop说明

一、Hadoop概述 Hadoop 是一个用于跨计算机集群存储和处理大型数据集的软件框架。它旨在处理大数据,即传统数据库无法有效管理的极其庞大和复杂的数据集。Hadoop不是传统意义上的数据仓库,因为它们的用途不同,架构也不同。Hadoop 是一个跨分布…

Vue2基础及其进阶面试(二)

vue2的生命周期 删除一些没用的 App.vue 删成这个样子就行 <template><router-view/></template><style lang"scss"></style>来到路由把没用的删除 import Vue from vue import VueRouter from vue-router import HomeView from .…

JAVASE之类和对象(2)

哪怕犯错&#xff0c;也不能什么都不做。 主页&#xff1a;趋早–Step 专栏&#xff1a;JAVASE gitte:https://gitee.com/good-thg 接上部分&#xff0c;我们继续来学习JAVAEE类和对象。 引言&#xff1a; 这篇文章接上一篇&#xff0c;后半部分&#xff0c;结束类和对象 目录 …

Spring Boot 3.0:未来企业应用开发的基石

文章目录 一、Spring Boot 3.0的核心特性二、Spring Boot 3.0的优势三、如何在项目中应用Spring Boot 3.01.更新项目依赖2.调整代码结构3.测试和部署 《学习Spring Boot 3.0》内容简介作者简介目录内容介绍 随着技术的飞速发展&#xff0c;企业应用开发的需求也在不断演变。Spr…

爽!AI手绘变插画,接单赚爆了!

我最近发现一款名叫Hyper-SD15-Scribble的AI项目&#xff0c;可以实现一键手绘变插画的功能&#xff0c;而且它搭载了字节出品的超快速生成图片的AI大模型Hyper-SD15&#xff0c;可以实现几乎实时生成图片&#xff0c;有了它&#xff0c;拿去接一些手绘商单分分钟出图&#xff…