Redis存在五种基础类型:字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)。本次列举出Hash的常用操作。

  Redis官网:https://redis.io/

一、哈希(Hash)介绍

  哈希(Hash)是Redis 中基本的类型,一个 key 对应着一个集合,其中集合中以field-value形式组成一个字典。可以理解为一个字典中,单项值部分又是一个字典。每个哈希(Hash)可以存储2^32-1个键值对。数据序列化成json格式为{key:{field1:value1,field2:value2......fieldN:valueN}}。

  • 内部用zipmap结构存储,以节约空间
  • 更新方便,只需更新field对应value值即可更新。

  

二、哈希(Hash)常用Api 

  • 设置field-value

  

  eg:

  

  • 设置初次添加的field-value

  

  •  获取值

  

  eg:

  

  • 批量设置值

  

  eg:

  

  • 批量获取值

  

  eg:

  

  • 获取key下集合信息

  

  eg:

  

  •  获取key下所有field

  

  eg:

  

  •  获取key下所有value

  

  eg:

  

  •  删除key下的field

  

  eg:

  

三、哈希(Hash)不常用Api 

  • 查询key下field是否存在

  

  eg:

  

  • 递增key下field映射值(△n)

  

  eg:

  

  • 递增key下field映射值(△n 浮点数)

  

  eg:

  

  • 获取key下field数量

  

  eg:

  

  • 获取key下field映射值的长度

  

  eg:

  

  • 迭代哈希表中的键值对

  

   eg:数量有限,返回游标仍然是0。

  

四、哈希(Hash)简单应用场景

  模拟文章概要信息的Hash存储并快速获取,场景如下,网站首页分页展示文章概要信息,定义为热区文章,如某文章更改内容,则先判定是否该文章id属于热区,如属于则更改Hash中field对应的值。

1、模拟文章数据,设置一堆种子

var blogOutlineInfoList = new List<BlogOutlineInfo>()
{
new BlogOutlineInfo()
{
Id = "",
Title = "CSharp",
Author = "微笑刺客",
CreateTime = DateTime.Now,
Content = "CSharp从入门到升仙",
CommentCount =,
ReadCount = ,
RecommendCount =
},
new BlogOutlineInfo()
{
Id = "",
Title = "Mysql",
Author = "微笑刺客",
CreateTime = DateTime.Now,
Content = "Mysql从入门到遁地",
CommentCount =,
ReadCount = ,
RecommendCount =
},
new BlogOutlineInfo()
{
Id = "",
Title = "Docker",
Author = "微笑刺客",
CreateTime = DateTime.Now,
Content = "Docker从入门到转行",
CommentCount =,
ReadCount = ,
RecommendCount =
},
...
};

2、将种子数据加入到Redis中(缓存预热)

foreach (var blogOutlineInfo in blogOutlineInfoList)
{
//设置Redis_key
var blogOutlineInfoKey = $"blogOutlineInfo_{blogOutlineInfo.Id}"; //初始化属性值
service.HashSet(blogOutlineInfoKey, nameof(BlogOutlineInfo.Title), blogOutlineInfo.Title);
service.HashSet(blogOutlineInfoKey, nameof(BlogOutlineInfo.Content), blogOutlineInfo.Content);
service.HashSet(blogOutlineInfoKey, nameof(BlogOutlineInfo.Author), blogOutlineInfo.Author);
service.HashSet(blogOutlineInfoKey, nameof(BlogOutlineInfo.CreateTime), blogOutlineInfo.CreateTime);
service.HashSet(blogOutlineInfoKey, nameof(BlogOutlineInfo.CommentCount), blogOutlineInfo.CommentCount);
service.HashSet(blogOutlineInfoKey, nameof(BlogOutlineInfo.ReadCount), blogOutlineInfo.ReadCount);
service.HashSet(blogOutlineInfoKey, nameof(BlogOutlineInfo.RecommendCount), blogOutlineInfo.RecommendCount);
}

3、网站中对于某页需要的数据,根据当前页面,先从Redis的List中获取相关文章Id,然后再从Hash中获取文章概要信息。

 

4、模拟某文章增加推荐、评论或是访问量。

#region 增加推荐数量
service.HashIncrement("blogOutlineInfo_9527", "RecommendCount", );
#endregion #region 更改简介内容
service.HashSet("blogOutlineInfo_9530", "Content", "k8s从入门到失业");
#endregion #region 增加阅读量
service.HashIncrement("blogOutlineInfo_9528", "ReadCount", );
#endregion

5、运行效果,对于第一篇的推荐数量和第二篇的阅读数量可直接进行更改。

 

 仓库地址:https://gitee.com/530521314/Partner.TreasureChest.git(RedisOperate文件夹)

2020-05-13,望技术有成后能回来看见自己的脚步

初探Redis-基础类型Hash的更多相关文章

  1. 一文了解:Redis基础类型

    Redis基础类型 Redis特点 开源的,BSD许可高级的key-value存储系统 可以用来存储字符串,哈希结构,链表,集合 安装 windows:https://github.com/micro ...

  2. Redis基础类型常用操作命令

    Redis基础类型常用操作命令 概念:Redis是用C语言开发的一个开源的高性能键值对数据库. 特征: 数据间没有必然的联系 内部采用单线程机制进行工作 高性能 多数据类型支持 字符串类型 Strin ...

  3. Redis学习笔记(2) Redis基础类型及命令之一

    1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...

  4. Redis学习笔记(3) Redis基础类型及命令之二

    1. 集合类型 集合类型与列表类型有很多相似之处,但二者的区别在于:前者具有唯一性,但不具有有序性:后者具有有序性,但不具有唯一性.集合类型的常用操作是向集合中加入或删除元素.判断某个元素是否存在等, ...

  5. 6、Redis中对Hash类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  6. Redis数据类型之散列类型hash

    在redis中用的最多的就是hash和string类型. 问题 假设有User对象以JSON序列化的形式存储到redis中, User对象有id.username.password.age.name等 ...

  7. 3、Redis 基础

    Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...

  8. Redis基础知识之—— 缓存应用场景

    转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ...

  9. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

随机推荐

  1. mysql 使用记录

    修改 mysql 数据库密码 mysqladmin -u username -h host_name password -P <port> "new_password" ...

  2. 天池Docker学习赛笔记

    容器的基本概念 什么是容器? 容器就是一个视图隔离.资源可限制.独立文件系统的进程集合.所谓"视图隔离"就是能够看到部分进程以及具有独立的主机名等:控制资源使用率则是可以对于内存大 ...

  3. c++指定输出小数的精度

    在c++中,有的时候要对输出的double型或float型保留几位小数,这时可以使用setflags(ios::fixed),不过要先包含有文件<iomainp>,具体如下 例: #inc ...

  4. PHP中静态(static)调用非静态方法详解--调用!!!

    来源:https://www.cnblogs.com/yolo-bean/p/7739265.html 这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么 ...

  5. PHP使用token防止表单重复提交的方法

    本文实例讲述了PHP使用token防止表单重复提交的方法.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  6. 任意文件下载(pikachu)

    任意文件下载漏洞 很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件. 但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他 ...

  7. 企业级 Harbor 镜像仓库

    Harbor是由VMWare公司开源的容器镜像仓库.事实上,Harbor是在Docker Registry上进行了相应 的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基 ...

  8. Linux安装jdk(详细教程)

    一.JDK介绍 JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JA ...

  9. 【shell】shell脚本入门

    1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...

  10. Silverlight Tools Beta2更新了中文语言支持

    1,似乎是微软偷偷摸摸更新的......刚才无意间发现,已经下载安装并测试,已在中文版的VS2008安装成功.注意下载页面的安装说明: http://www.microsoft.com/downloa ...