redis 简单整理——redis 的哈希基本结构和命令[三]
前言
简单介绍一下哈希基本结构和命令。
正文
什么是hash呢? hash也可以叫做字典、关联数组。
哈希类型是键本身又是一个键值对结构:
value={{field1,value1},...{fieldN,valueN}}
哈希类型中的映射关系叫作field-value,注意这里的value是指field对应 的值,不是键对应的值,请注意value在不同上下文的作用。
来看下命令。
hset key field value
获取值:
hget user:1 name
删除:
hdel key field [field ...]
判断有多少值:
一次性获取多个值:
同样有mset:
然后还可以判断field 是否存在。
hexists key field
获取其全部的key:
获取其全部的值:
获取全部的keyvalue:
在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。 如果开发人员只需要获取部分field,可以使用hmget,如果一定要获取全部 field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。
hincrby key field
hincrbyfloat key field
hincrby和hincrbyfloat,就像incrby和incrbyfloat命令一样,但是它们的作 用域是filed。
计算value的字符串长度
hstrlen key field
哈希命令复杂度:
内部编码:
·ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries 配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64 字节)时,
Redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的 结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。
·hashtable(哈希表):当哈希类型无法满足ziplist的条件时,Redis会使 用hashtable作为哈希的内部实现,因为此时ziplist的读写效率会下降,而 hashtable的读写时间复杂度为O(1)。
使用场景:
- 缓存,比如用作用户信息存储
前面提及到用户信息用字符串存储,然后再系列化。
相比于使用字符串序列化缓存用户信息,哈希类型变得更加直观,并且 102
在更新操作上会更加便捷。可以将每个用户的id定义为键后缀,多对field- value对应每个用户的属性,类似如下伪代码:
UserInfo getUserInfo(long id){ // 用户id作为key后缀 userRedisKey = "user:info:" + id; /
/ 使用hgetall获取所有用户信息映射关系 userInfoMap = redis.hgetAll(userRedisKey);
UserInfo userInfo; if (userInfoMap != null) { // 将映射关系转换为UserInfo userInfo = transferMapToUserInfo(userInfoMap); }
else { // 从MySQL中获取用户信息 userInfo = mysql.get(id); // 将userInfo变为映射关系使用hmset保存到Redis中 redis.hmset(userRedisKey, transferUserInfoToMap(userInfo));
// 添加过期时间 redis.expire(userRedisKey, 3600); }return userInfo; }
这样相比于字符串呢,每次就不用去系列化了,字符串每次都要去进行系列化,然后反系列化存储,具备一定的开销。
然后哈希类型当然也是有缺点的,如果编码是hashtable,那么是比较消耗内存的。
结
下一节redis的list 整理。
redis 简单整理——redis 的哈希基本结构和命令[三]的更多相关文章
- 一篇文章带你了解NoSql数据库——Redis简单入门
一篇文章带你了解NoSql数据库--Redis简单入门 Redis是一个基于内存的key-value结构数据库 我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储存信息 在本篇 ...
- Redis简单介绍
redis简单介绍 Redis VS key-value缓存产品 Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重新启动的时候能够再次载入进行使用. Redis不只支持简单的key-va ...
- Redis总结笔记(一):安装和常用命令
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/112.html?1455860824 一.redis简单介绍 redis是 ...
- 《闲扯Redis六》Redis五种数据类型之Hash型
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
- Redis 简单介绍(知识整理笔记)
前言: Redis 介绍:轻量级.Key-Value.内存数据库.支持持久化 Redis 数据结构:string(字符串),hash(哈希),list(列表),set(集合)及 zset (sorte ...
- springboot整合redis(简单整理)
Redis安装与开启 我这里是在windows上练习,所以这里的安装是指在windows上的安装,操作非常简单,点击https://github.com/MicrosoftArchive/redis/ ...
- 面试简单整理之Redis
179.redis 是什么?都有哪些使用场景? Redis是一个key-value存储系统. 缓存,消息队列,排行榜/计数器,分布式架构,做session共享 180.redis 有哪些功能? 181 ...
- redis简单使用
主要参考资料:http://wiki.jikexueyuan.com/project/redis-guide/data-type.html一.redis 安装1.在官网下载安装包2.解压安装包 tar ...
- Redis 知识 整理
简介 安装 启动 注意事项 使用命令 通用命令 数据结构 字符串(string) 哈希(hash) 队列(list) 集合(set) 有序集合(zset) 位图(bitcount) 事务 订阅与发布 ...
- Redis学习整理
目录 1.Redis基本概念 2.Redis的5种基本类型 3.Jedis整合redis操作 4.Springboot整合redis 5.Redis主从复制 5.1.概念 5.2.原理 6.开启主从复 ...
随机推荐
- BUUCTF—Crypto(完结版本—_—)
BUUCTF-Crypto 1.一眼就解密 考点:base64 我的解答: 字符串后面的等号,看来是base大家族,由字母和数字范围来看是base64,不管了,先扔CyberCher,仙女魔法棒变出f ...
- 将Abp移植进.NET MAUI项目(二):配置与基类编写
因为我们要做一个数据持久化型的小应用,所以在完成Abp功能的集成后,我们需要做数据库相关的配置工作 配置数据库 在MauiBoilerplate.Core项目中,添加两个实体类: 我们简单的写一个 ...
- 在运行程序是出现sh: 行 1: cls: 未找到命令
在运行程序是出现sh: 行 1: cls: 未找到命令 原因是system("cls");--这是在程序中调用系统命令,但是linux识别不了.功能是清除当前的终端显示数据.找到l ...
- 用户不在 sudoers 文件中。此事将被报告
在终端,进入root模式 vim /etc/sudoers 在 sudo (ALL:ALL) ALL下 添加 用户名 (ALL:ALL) ALL
- 智慧公安!3DCAT实时云渲染助力某公安机关打造数字孪生可视化系统
近年来,随着大数据.数字孪生.云计算.人工智能等技术的飞速发展,数字化浪潮席卷全国各地公安系统.2022年全国公安工作会议中也提到,数字化改革是推动公安工作创新发展的大引擎.培育战斗力生成新的增长点. ...
- Oracle数据库对比MySQL
基本 Oracle默认端口:1521 默认用户:system MySQL默认端口:3306 默认用户:root 连接MySQL: mysql -u root -p -- 输入密码 -- 查询所有数据库 ...
- TorchV的RAG实践分享(三):解析llama_index的数据存储结构和召回策略过程
1.前言 LlamaIndex是一个基于LLM的数据处理框架,在RAG领域非常流行,简单的几行代码就能实现本地的文件的对话功能,对开发者提供了极致的封装,开箱即用. 本文以官方提供的最简单的代理示例为 ...
- 【已解决】linux---bash: 无法为立即文档创建临时文件: 设备上没有空间
/dev/mapper/centos-root 17G 17G 48K 100% / 参考:https://www.cnblogs.com/rainbow-1/p/15391407.ht ...
- Python爬虫爬取搜狐视频电影并存储到mysql数据库
数据获取方式:微信搜索关注[靠谱杨阅读人生]回复[电影].整理不易,资源付费,谢谢支持. 代码: 1 import time 2 import traceback 3 import requests ...
- 微服务集成Spring Cloud Alibaba Seata(一)Seata服务搭建
1.Seata介绍 Seata是阿里开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.数据库事务我们都知道,事务都是遵循ACID原则.而通过使用Seata可以实现在两个服务模块 ...