当前位置: 首页 > article >正文

redis详细教程(3.hash和set类型)

hash

Redis中的Hash是一种数据结构,用于存储键值对集合。在Redis中,Hash非常适合表示对象,其中对象的每个字段都对应一个键值对。以下是关于Redis中Hash的详细讲解:

特点:

1. 键值对集合:Hash是一个包含字段和值的映射表,字段和值都是字符串类型。
2. 存储结构:Hash内部实现为一个字典,当数据量较小时,使用ziplist(压缩列表)存储,当数据量较大时,会使用hashtable(哈希表)存储。
3. 动态字段:Hash可以动态地添加或删除字段,非常灵活。
4. 内存占用:相较于使用多个String键存储对象,Hash可以更节省内存。

常用命令

以下是一些Redis中操作Hash的常用命令:

1. HSET:设置Hash中的字段值,HGET:获取Hash中指定字段的值,如下图:

2. HMSET:同时设置多个字段值,HMGET:同时获取多个字段的值。

3. HGETALL:获取Hash中所有的字段和值。

4. HDEL:删除Hash中的指定字段,HLEN:获取Hash中字段的数量:


5. HEXISTS:判断Hash中是否存在指定字段。

Hash非常适合存储对象,如用户信息、商品信息等,可以将数据库中的行数据存储在Hash中,以减少数据库访问次数。虽然Hash可以节省内存,但当数据量非常大时,仍然需要注意内存占用。

set

Redis中的Set是一种无序集合数据结构,它存储了多个字符串元素,这些元素是唯一的,即集合中不允许有重复的元素。

特点

1. 唯一性:Set中的元素都是唯一的,重复添加相同的元素不会影响集合的大小。
2. 无序性:Set中的元素是无序的,这意味着元素的位置不是固定的,每次获取元素时顺序可能不同。
3. 元素类型:Set中的元素只能是字符串类型,但Redis内部会处理整数编码的字符串,以便优化存储和性能。
4. 内部实现:当Set的元素数量较少时,Redis使用intset(整数集合)作为内部实现,这样可以节省内存;当元素数量较多或元素不是整数时,Redis使用hashtable(哈希表)。

常用命令

以下是Redis中操作Set的一些常用命令:

SADD:向集合中添加一个或多个成员,SMEMBERS:获取集合中的所有成员。

SISMEMBER:判断一个成员是否存在于集合中。

    
SREM:从集合中移除一个或多个成员, SCARD:获取集合的成员数量。

    
SPOP:随机移除并返回集合中的一个成员。


 SRANDMEMBER:随机返回集合中的一个或多个成员,但不从集合中移除。


SMOVE:将一个成员从一个集合移动到另一个集合。

    
SDIFF:返回多个集合的差集。

 SINTER:返回多个集合的交集。

SUNION:返回多个集合的并集。

当Set存储大量数据时,需要注意内存使用情况,虽然Set内部可以优化整数类型的存储,但通常元素都是字符串类型。


http://www.kler.cn/a/373754.html

相关文章:

  • Marin说PCB之电源的Surface Current Density知多少?
  • 树莓派基础设置--1.更新和升级操作系统
  • 安宝特分享 | AR技术引领:跨国工业远程协作创新模式
  • 书生-第四期闯关:完成SSH连接与端口映射并运行hello_world.py
  • ValueError: Object arrays cannot be loaded when allow_pickle=False
  • 力扣之612.平面上的最近距离
  • [TypeError]: type ‘AbstractProvider‘ is not subscriptable
  • 三项智能网联汽车强制性国家标准正式发布(附图解)
  • 应用在汽车控制系统安全气囊的爱普生可编程晶振SG-8018CG
  • SpringBoot技术:闲一品交易的新机遇
  • Java 多线程(九)—— JUC 常见组件 与 线程安全的集合类
  • ComfyUI正式版来袭!一键安装无需手动部署!支持所有电脑系统
  • 线程本地变量-ThreadLocal
  • CMake知识点
  • [LeetCode] 36. 有效的数独
  • JAVA的动态代理
  • 创新实践:基于边缘智能+扣子的智能取物机器人解决方案
  • DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计
  • Java中String的length与Oracle数据库中VARCHAR2实际存储长度不一致的问题
  • 【优选算法篇】前缀之美,后缀之韵:于数列深处追寻算法的动与静
  • 面试题:JVM(一)
  • 类和对象(中)—— 类的六个默认成员函数
  • 【面试题】Node.JS篇
  • 「MinIO快速入门」
  • nginx------正向代理,反向代理生产,以及能否不使用代理详解
  • SpringBoot + Shiro权限管理