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 已经存在于哈希表中,旧值将被覆盖。

sql 复制代码
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 命令。

sql 复制代码
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 的值。

sql 复制代码
# 域存在
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 中的一个或多个指定域,不存在的域将被忽略。

sql 复制代码
# 测试数据
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 中域的数量。

sql 复制代码
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),所以返回值的长度是哈希表大小的两倍。

sql 复制代码
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、对象缓存

sql 复制代码
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上

  1. Redis集群架构下不适合大规模使用

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

相关推荐
低代码布道师10 分钟前
Next.js 16 全栈实战(三):数据库建模与动态菜单实现
开发语言·javascript·数据库
上海合宙LuatOS11 分钟前
LuatOS核心库API——【hmeta 】硬件元数据
单片机·嵌入式硬件·物联网·算法·音视频·硬件工程·哈希算法
远方160927 分钟前
114-Oracle Database 26ai在Oracle Linux 9上的OUI图形界面安装
linux·服务器·数据库·sql·oracle·database
heimeiyingwang36 分钟前
向量数据库Milvus的安装部署指南
java·数据库·架构·database
一次旅行36 分钟前
缓存介绍和总结
缓存·测试总结
山岚的运维笔记43 分钟前
SQL Server笔记 -- 第50章 存储过程
数据库·笔记·sql·microsoft·oracle·sqlserver
LSL666_1 小时前
10 集群
java·开发语言·数据库·redis·集群
TDengine (老段)1 小时前
TDengine IDMP 数据可视化 7. 事件列表
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
SQL必知必会1 小时前
SQL 条件聚合:超越基础 GROUP BY
数据库·sql
hacklf20081 小时前
数据库高安全—openGauss安全整体架构&安全认证
数据库·安全·架构