1.哈希类型键值结构

哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value

其中field部分代表属性,value代表属性对应的值

上面的图里,user:1:info为key,name,age,Date为user这个key的一些属性,value是属性对应的值

在hash中,可以为key添加一个新的属性和新的值

比如使用下面的命令向user:1:info这个key添加一个新属性viewCounter,属性对应的值为100

hset user:1:info viewCounter 100

2.特点

key-value结构
key(field)不能相同,value可以相同

3.Redis哈希类型对应的命令

3.1 hget命令,hset命令和hdel命令

hget key field			获取hash key对应的field的value
hset key field value 设置hash key对应的field的value
hdel key field 删除hash key对应的field的value

例子:

127.0.0.1:6379> hset user:1:info age 23
(integer) 1
127.0.0.1:6379> hget user:1:info age
"23"
127.0.0.1:6379> hset user:1:info name python
(integer) 1
127.0.0.1:6379> hgetall user:1:info
1) "age"
2) "23"
3) "name"
4) "python"
127.0.0.1:6379> hdel user:1:info age
(integer) 1
127.0.0.1:6379> hgetall user:1:info
1) "name"
2) "python"
127.0.0.1:6379>

注意事项:

hget命令,hset命令和hdel命令的时间复杂度为O(1)

3.2 hexists命令和hlen命令

hexists key field	判断hash key是否有field
hlen key 获取hash key field的数量

例子:

127.0.0.1:6379> hgetall user:1:info
1) "name"
2) "python"
3) "age"
4) "23"
127.0.0.1:6379> hexists user:1:info name
(integer) 1
127.0.0.1:6379> hlen user:1:info
(integer) 2

注意事项:

hexists命令和hlen命令的时间复杂度为O(1)

3.3 hmget命令和hmset命令

hmget key field1 field2 ... fieldN							批量获取hash key的一批field对应的值
hmset key field1 value1 field2 value2 ... fieldN valueN 批量设置hash key的一批field value

例子:

127.0.0.1:6379> hmset user:2:info age 30 name mysql page 50
OK
127.0.0.1:6379> hlen user:2:info
(integer) 3
127.0.0.1:6379> hmget user:2:info age name
1) "30"
2) "mysql"
127.0.0.1:6379>

注意事项:

hmget命令和hmset命令的时间复杂度为O(1)

3.4 hgetall命令,hvals命令和hkeys命令

hgetall key			返回hash key对应所有的field和value
hvals key 返回hash key对应所有field的value
hkeys key 返回hash key对应所有field

例子:

127.0.0.1:6379> hgetall user:2:info
1) "age"
2) "30"
3) "name"
4) "mysql"
5) "page"
6) "50"
127.0.0.1:6379> hvals user:2:info
1) "30"
2) "mysql"
3) "50"
127.0.0.1:6379> hkeys user:2:info
1) "age"
2) "name"
3) "page"

注意事项:

hgetall命令,hvals命令和hkeys命令的时间复杂度为O(1)
由于Redis的单线程的特点以及hgetall会返回所有的key和value,所以如果hash中存储的数据过多时,hgetall命令的执行速度会比较慢

3.5 hsetnx命令,hincrby命令和hincrbyfloat命令

hsetnx key field value					设置hash key对应field的value(如field已经存在,则失败)
hincrby key field intCounter hash key对应的field的value自增intCounter
hincrbyfloat key field floatCounter hincrby浮点数版

注意事项:

hsetnx命令,hincrby命令和hincrbyfloat命令的时间复杂度为O(1)

4.实战

记录网站每个用户个人主页的访问量,也可以使用哈希类型

这样可以保证每个用户的相关数据是一个整体,而使用字符串类型保存的话,则每个用户个人主面的访问量与每个用户的其他数据都是一个分离的状态。

记录网站每个用户个人主页的访问量需要根据实际情况来进行设计使用

hincrby user:1:info pageview count

5.使用Redis保存每个用户相关的数据,可以使用三种方式

5.1 方式一

使用用户的id为key,把用户的相关数据进行序列化后并做为value

使用时,根据用户id获取对应的数据的字符串格式,进行反序列化后就可以得到用户相关的数据进行查询和更新操作

5.2 方式二

使用用户的id与用户对应的属性名进行拼接得到新的字符串,并做为key,用户对应属性的值做为value

这样,用户的所有信息都是分离开的,可以很方便的对用户的数据进行查询和更新,并且可以很方便的为用户添加新的属性,而不用对原来的属性有影响 

5.3 方式三

使用用户id做为key,用户的其他数据都保存为hash格式,

对用户的属性进行查询,更新和添加都比较方便

保存用户相关数据的方式比较

高可用Redis(三):Hash类型的更多相关文章

  1. 如何搭建高可用redis架构?

    如何搭建高可用redis架构? 温国兵 架构师小秘圈 昨天 作者:温国兵,曾任职于酷狗音乐,现为三七互娱 DBA.目前主要关注领域:数据库自动化运维.高可用架构设计.数据库安全.海量数据解决方案.以及 ...

  2. 高可用Redis服务架构分析与搭建

    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量 ...

  3. centos下搭建高可用redis

    Linux下搭建高可用Redis缓存 Redis是一个高性能的key-value数据库,现时越来越多企业与应用使用Redis作为缓存服务器.楼主是一枚JAVA后端程序员,也算是半个运维工程师了.在Li ...

  4. 高可用Redis服务架构分析与搭建(单redis实例)

    原文地址:https://www.cnblogs.com/xuning/p/8464625.html 基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在 ...

  5. Mycat高可用解决方案三(读写分离)

    Mycat高可用解决方案三(读写分离) 一.系统部署规划 名称 IP 主机名称 配置 192.168.199.112 mycat01 2核/2G Mysql主节点 192.168.199.110 my ...

  6. Redis从出门到高可用--Redis复制原理与优化

    Redis从出门到高可用–Redis复制原理与优化 单机有什么问题? 1.单机故障; 2.单机容量有瓶颈 3.单机有QPS瓶颈 主从复制:主机数据更新后根据配置和策略,自动同步到备机的master/s ...

  7. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...

  8. redis之Hash类型常用方法总结

    redis之Hash类型常用方法总结 格式: 存--HMGET key field [field ...] 取--HMGET key field [field ...] M:表示能取多个值,many ...

  9. 暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案

    暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案 这是悟空的第 158 篇原创文章 原文链接:首发悟空聊架构 官网:www.passjava.cn 你好,我是悟空. 前言 ...

随机推荐

  1. Python------Mongodb操作

    Python3要操作Mongodb需要下载pymongo,Linux下获取pymongo的方法也比较简单,控制台输入命令:sudo pip3 install pymongo 即可. Pymongo的文 ...

  2. 其他综合-内网下Yum仓库搭建配置

    内网下Yum仓库搭建配置 1.实验环境 虚拟机环境: VMware 12 版本虚拟机 网络环境: 内网 IP 段:172.16.1.0 外网 iP 段(模拟):10.0.0.0 实验基础:(能够上网, ...

  3. 定时任务调度工作(学习记录 四)schedule与scheduleAtFixedRate的区别

    根据两种情况来看区别 一.首次计划执行的时间早于当前的时间 1.schedule方法 “fixed-delay”:如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算 演示 ...

  4. Nginx访问配置

    配置HTTP协议(使用80默认端口,非HTTPS配置SSL)访问网站 包括RestAPI的配置和RestAPI文档的配置 例如: server { # 配置为HTTP协议 listen ; serve ...

  5. MySQL安装后无法用root用户访问的问题

    今天在换了Ubuntu后装个本地的mysql,安装过程没什么好说的:sudo apt-get install mysql-server 安装好了之后我做了以下一系列常规动作: 1.$sudo mysq ...

  6. 前端知识之jQuery

    通过 jQuery,您可以选取(查询,query) HTML 元素,并对它们执行"操作"(actions). http://www.runoob.com/jquery/jquery ...

  7. js slice 假分页

    语法 arrayObject.slice(start,end) 参数 描述 start 必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 ...

  8. java获取文件行数

    public long getLineNumber(File file) { if (file.exists()) { try { FileReader fileReader = new FileRe ...

  9. MySQL——修改用户密码 | 移除权限

    修改用户密码 '; 移除权限 REVOKE Delete, Drop ON *.* FROM `root`@`localhost`; 权限列表

  10. 文本编辑利器Notepad++ 10个强大而又鲜为人知的特性【转】

    文本编辑利器Notepad++ 10个强大而又鲜为人知的特性 - 为程序员服务