本系列会持续输出Redis相关的知识整理,提升自己的同时希望能帮助到有需要的朋友,持续输出…持续输出…持续输出…
目录传送本篇文章会简单整理一下Redis核心数据结构和基本使用。
Hash数据常用命令
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
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> hset phone price 5999
(integer) 1
127.0.0.1:6379> hsetnx phone price 5888
(integer) 0
127.0.0.1:6379> hsetnx phonePlus price 5888
(integer) 1
127.0.0.1:6379> hmset product name phone12 price 9999 color black
OK
127.0.0.1:6379> hget phone price
"5999"
127.0.0.1:6379> hmget product name price color
1) "phone12"
2) "9999"
3) "black"
127.0.0.1:6379> hdel product color
(integer) 1
127.0.0.1:6379> hlen product
(integer) 2
127.0.0.1:6379> hgetall product
1) "name"
2) "phone12"
3) "price"
4) "9999"
127.0.0.1:6379> hincrby product price 1000
(integer) 10999
127.0.0.1:6379>
使用场景
- 对象存储
HMSET user name ccc age 18 HMSET user name zs age19 HMGET user name age
- 电商购物车 1)以用户id为key 2)商品id为field 3)商品数量为value
场景:
我们在购物车页面时我们会频繁的进行操作,并且用户可能在操作一半强制关闭进程,也就是说我们需要在用户每一次操作时都需要对此进行持久化操作,如果此时我们使用数据库进行该操作,我们会大量的频繁与数据交互,-严重会导致数据库崩溃,这里我们该类型对此进行操作,并主动或被动进行持久化操作。只需要一次数据库交互即可。
操作:
127.0.0.1:6379> hset userId:1 productId:1 1 //添加商品
(integer) 1
127.0.0.1:6379> hincrby userId:1 productId:1 1 //增加数量
(integer) 2
127.0.0.1:6379> hlen userId:1 // 获取商品数量
(integer) 1
127.0.0.1:6379> hdel userId:1 productId:1 //删除商品
(integer) 1
127.0.0.1:6379> hgetall userId:1 //获取购物车商品数量
(empty list or set)
127.0.0.1:6379>
Hash结构的优缺点
- 优点
1)同类数据归类整合储存,方便数据管理 2)相比string操作消耗内存与cpu更小 3)相比string储存更节省空间
- 缺点
1)过期功能不能使用在field上,只能用在key上,我们无法对属性进行设置过期时间,只能对该key(对象)使用 2)Redis集群架构下不适合大规模使用