初探Redis-基础类型Hash
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的更多相关文章
- 一文了解:Redis基础类型
		Redis基础类型 Redis特点 开源的,BSD许可高级的key-value存储系统 可以用来存储字符串,哈希结构,链表,集合 安装 windows:https://github.com/micro ... 
- Redis基础类型常用操作命令
		Redis基础类型常用操作命令 概念:Redis是用C语言开发的一个开源的高性能键值对数据库. 特征: 数据间没有必然的联系 内部采用单线程机制进行工作 高性能 多数据类型支持 字符串类型 Strin ... 
- Redis学习笔记(2) Redis基础类型及命令之一
		1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ... 
- Redis学习笔记(3) Redis基础类型及命令之二
		1. 集合类型 集合类型与列表类型有很多相似之处,但二者的区别在于:前者具有唯一性,但不具有有序性:后者具有有序性,但不具有唯一性.集合类型的常用操作是向集合中加入或删除元素.判断某个元素是否存在等, ... 
- 6、Redis中对Hash类型的操作命令
		写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ... 
- Redis数据类型之散列类型hash
		在redis中用的最多的就是hash和string类型. 问题 假设有User对象以JSON序列化的形式存储到redis中, User对象有id.username.password.age.name等 ... 
- 3、Redis 基础
		Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ... 
- Redis基础知识之—— 缓存应用场景
		转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ... 
- windows下使用redis,Redis入门使用,Redis基础命令
		windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ... 
随机推荐
- D. Minimax Problem     Codeforces 1288D   binary_search+二进制
			题目大意:n*m的矩阵中,找到两行数,可以形成两个一维数组,数组1的位置i和数组2的位置i去最大构成新数组b的元素b[i],最终目的要使数组b中最小的数尽可能的大 题解: m的范围是(1,8),比较小 ... 
- 详解 LinkedHashMap
			同学们可能在看到这个类的时候就明白了很多关于这个类的特点,那么,本人就在这里来啰嗦一下,再来介绍下这个类: (有关Map集合的基本性质,请观看本人博文-- <详解 Map集合>) Link ... 
- C#集合类型——Array、ArrayList、List 之浅谈
			在学习或工作中,集合是经常用到的,可以换一句话说“无项目无集合”,“项目皆有集合”.它一般存储一系列数据或者将一系列数据进行相关操作.在这里先大略谈一些集合类型的相关知识用于回顾. 数组(Array) ... 
- kubernetes删除pod,pod一直处于Terminating状态
			删除pod,pod一直处于Terminating状态 [root@yxz-cluster01 deploy_yaml]# kubectl get pod -n yunanbao NAME READY ... 
- Java 多线程 -- 线程安全 双重检测(double checking)
			先看一个经典的12306案例: public class SynBlockTest { public static void main(String[] args) { // 一份资源 SynWeb1 ... 
- git工具上传项目到码云
			首先,你需要在本地安装git客户端,此处简单易懂,略过然后,在本地建好文件夹,以本人为例,我的路径为 E:\git_project,此时需要通过鼠标右键选择:git bush here 如图所示然后会 ... 
- MySQL join的7种理论及SQL写法
			转载于 https://www.cnblogs.com/dinglinyong/p/6656315.html 建表 在这里呢我们先来建立两张有外键关联的张表. CREATE DATABASE d ... 
- [SVN] Couldn't perform atomic initialization
			svn: Commit failed (details follow): svn: Couldn't perform atomic initialization It was because the ... 
- office 365 激活
			将以下代码复制到记事本 @echo off title Activate Microsoft Office ALL versions &echo - Microsoft Office Prof ... 
- 用C++模拟蚊子的运动来检验概率论内容
			背景:在一个很大的方形透明容器内,从某个位置放入适量的蚊子,等待几分钟后观察蚊子的分布. #include <iostream> #include <cstdlib> #inc ... 
