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集群架构下不适合大规模使用

相关推荐
十叶知秋22 分钟前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
monkey_meng33 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
想要打 Acm 的小周同学呀1 小时前
LRU缓存算法
java·算法·缓存
hlsd#1 小时前
go 集成go-redis 缓存操作
redis·缓存·golang
镰刀出海1 小时前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
瓜牛_gn2 小时前
mysql特性
数据库·mysql
奶糖趣多多3 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt4 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧6 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis7 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce