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

Redis常用操作及应用(二)

一、Hash结构

1、常用操作

HSET key field value                     //存储一个哈希表key的键值
HSETNX key field value                   //存储一个不存在的哈希表key的键值
HMSET key field value [field value ...]  //在一个哈希表key中存储多个键值对
HGET key field                           //获取哈希表key对应的field键值
HMGET key field [field ...]              //批量获取哈希表key中多个field键值
HDEL key field [field ...]               //删除哈希表key中的field键值
HLEN key                                 //返回哈希表key中field的数量
HGETALL key                              //返回哈希表key中所有的键值

HINCRBY key field increment              //为哈希表key中field键的值加上增量increment

2、理解

1)HSET key field value

将哈希表 key 中的域 field 的值设为 value 。

如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。

如果域 field 已经存在于哈希表中,旧值将被覆盖。

redis> HSET website google "www.g.cn"       # 设置一个新域
(integer) 1
redis> HSET website google "www.google.com" # 覆盖一个旧域
(integer) 0

2)HSETNX key field value

将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。

若域 field 已经存在,该操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

redis> HSETNX nosql key-value-store redis
(integer) 1
redis> HSETNX nosql key-value-store redis       # 操作无效,域 key-value-store 已存在
(integer) 0

3)HGET key field

返回哈希表 key 中给定域 field 的值。

# 域存在
redis> HSET site redis redis.com
(integer) 1
redis> HGET site redis
"redis.com"
# 域不存在
redis> HGET site mysql
(nil)

4)HDEL key field [field …]

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

# 测试数据
redis> HGETALL abbr
1) "a"
2) "apple"
3) "b"
4) "banana"
5) "c"
6) "cat"
7) "d"
8) "dog"
# 删除单个域
redis> HDEL abbr a
(integer) 1
# 删除不存在的域
redis> HDEL abbr not-exists-field
(integer) 0
# 删除多个域
redis> HDEL abbr b c
(integer) 2
redis> HGETALL abbr
1) "d"
2) "dog"

5)HLEN key

返回哈希表 key 中域的数量。

redis> HSET db redis redis.com
(integer) 1
redis> HSET db mysql mysql.com
(integer) 1
redis> HLEN db
(integer) 2
redis> HSET db mongodb mongodb.org
(integer) 1
redis> HLEN db
(integer) 3

6)HGETALL key

返回哈希表 key 中,所有的域和值。

在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

redis> HSET people jack "Jack Sparrow"
(integer) 1
redis> HSET people gump "Forrest Gump"
(integer) 1
redis> HGETALL people
1) "jack"          # 域
2) "Jack Sparrow"  # 值
3) "gump"
4) "Forrest Gump"

二、应用场景

1、对象缓存

HMSET  user  {userId}:name  zhuge  {userId}:balance  1888
HMSET  user  1:name  zhuge  1:balance  1888
HMGET  user  1:name  1:balance  

2、电商购物车

1)以用户id为key
2)商品id为field
3)商品数量为value

4)购物车操作
a.添加商品->hset cart:1001 10088 1
b.增加数量->hincrby cart:1001 10088 1
c.商品总数->hlen cart:1001
d.删除商品->hdel cart:1001 10088
e.获取购物车所有商品->hgetall cart:1001

三、优缺点

1、优点

1)同类数据归类整合储存,方便数据管理

2)相比string操作消耗内存与cpu更小

3)相比string储存更节省空间

2、缺点

1)过期功能不能使用在field上,只能用在key上

2) Redis集群架构下不适合大规模使用

点11)1)过期功能不能使用在field上,只能用在key上2) Redis集群架构下不适合大规模使用过期功能不能使用在field上,只能用在key上2) Redis集群架构下不适合大规模使用


http://www.kler.cn/news/148741.html

相关文章:

  • Nacos2.x配置中心源码分析
  • idea社区版免费下载方式
  • leetCode 100. 相同的树 和 leetCode 101. 对称二叉树 和 110. 平衡二叉树 和 199. 二叉树的右视图
  • 【Kotlin】高阶函数和Lambda
  • GitLab 登录中,LDAP和 Standard 验证有什么区别
  • C++:C++11新特性---右值引用
  • Notion for Mac:打造您的专属多功能办公笔记软件
  • 小狐狸ChatGPT付费创作系统V2.3.4独立版 +WEB端+ H5端最新去弹窗授权
  • 【开题报告】基于uniapp的瑜伽学习交流小程序的设计与实现
  • 近五年—中国十大科技进展(2018年—2022年)
  • Spring Cloud 版本升级记:OpenFeignClient与Gateway的爱恨交织
  • 【C++ Primer Plus学习记录】while循环
  • 批量将本地N个英文Html文档进行中文翻译-操作篇
  • 移动应用开发介绍及iOS方向学习路线(HUT移动组版)
  • OpenCV | 模版匹配
  • SpringCloudAlibaba整合Gateway实现网关
  • stm32 TIM
  • 【Docker项目实战】使用Docker部署Plik临时文件上传系统
  • 车载以太网-DHCP
  • Python中的datetime库
  • 硬件工程师助理怎么买器件
  • 08-学成在线项目中统一异常处理的规范
  • C# WPF上位机开发(乘法计算小软件)
  • 面试:MyBatis问题
  • 论文阅读——DDeP(cvpr2023)
  • 2017年五一杯数学建模C题宜居城市问题值解题全过程文档及程序
  • Web前端开发技术:图像与多媒体文件
  • OpenCvSharp从入门到实践-(05)通道
  • ABAP算法 模拟退火
  • c语言 / 指针错误的几种情况