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

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.lryc.cn/news/474307.html

相关文章:

  • 性能测试详解
  • 修改ruoyi的logo和标题
  • vue系列==vue3新语法
  • 001-Kotlin界面开发之Jetpack Compose Desktop学习路径
  • qt QStackedLayout详解
  • python实现钉钉群机器人消息通知(消息卡片)
  • 防火墙技术应用
  • docker engine stopped
  • Redis- 内核的分配内存限制的警告“WARNING Memory overcommit must be enabled!”
  • 腾讯云在线扩容数据盘
  • Time Travel Queries|在 RisingWave 中访问历史数据
  • Unity之UnityWebRequest
  • 使用 pkg 打包 Puppeteer 应用:跨平台自动化的轻量级选择
  • 【Flask】三、Flask 常见项目架构
  • AI机西使用体验:你不知道的强大功能揭秘!
  • 什么是护网(HVV)需要什么技术?(内附护网超全资料包)
  • opencv优秀文章集合
  • php处理文件上传的五种方式
  • C#与C++交互开发系列(十一):委托和函数指针传递
  • 【window】补充一些powershell基本命令
  • 精准触达用户,私域三步法!
  • Tcl脚本介绍(一)
  • 安全运营 -- 监控linux命令history
  • MyBatis3(动态SQL 常用的动态SQL 元素 映射器注解 基本注解 结果映射注解)
  • C#自定义事件的案例
  • flume系列之:flume机器做条带划分提高磁盘性能和吞吐量的详细步骤
  • C++基于opencv的视频质量检测--图像清晰度检测
  • 力扣11.1
  • 打印室预约系统|基于java和小程序的打印室预约系统设计与实现(源码+数据库+文档)
  • 操作系统-多线程案例