接着上一篇,下面转到hash类型的代码使用

Hash:结构 key-key-value,通过索引快速定位到指定元素的,可直接修改某个字段

    /// <summary>
/// Hash:类似dictionary,通过索引快速定位到指定元素的,耗时均等,跟string的区别在于不用反序列化,直接修改某个字段
/// string的话要么是 001:序列化整个实体
/// 要么是 001_name: 001_pwd: 多个key-value
/// Hash的话,一个hashid-{key:value;key:value;key:value;}
/// 可以一次性查找实体,也可以单个,还可以单个修改
/// </summary>
public class RedisHashService : RedisBase
{
#region 添加
/// <summary>
/// 向hashid集合中添加key/value
/// </summary>
public bool SetEntryInHash(string hashid, string key, string value)
{
return base.iClient.SetEntryInHash(hashid, key, value);
}
/// <summary>
/// 如果hashid集合中存在key/value则不添加返回false,
/// 如果不存在在添加key/value,返回true
/// </summary>
public bool SetEntryInHashIfNotExists(string hashid, string key, string value)
{
return base.iClient.SetEntryInHashIfNotExists(hashid, key, value);
}
/// <summary>
/// 存储对象T t到hash集合中
/// 需要包含Id,然后用Id获取
/// </summary>
public void StoreAsHash<T>(T t)
{
base.iClient.StoreAsHash<T>(t);
}
#endregion #region 获取
/// <summary>
/// 获取对象T中ID为id的数据。
/// </summary>
public T GetFromHash<T>(object id)
{
return base.iClient.GetFromHash<T>(id);
}
/// <summary>
/// 获取所有hashid数据集的key/value数据集合
/// </summary>
public Dictionary<string, string> GetAllEntriesFromHash(string hashid)
{
return base.iClient.GetAllEntriesFromHash(hashid);
}
/// <summary>
/// 获取hashid数据集中的数据总数
/// </summary>
public long GetHashCount(string hashid)
{
return base.iClient.GetHashCount(hashid);
}
/// <summary>
/// 获取hashid数据集中所有key的集合
/// </summary>
public List<string> GetHashKeys(string hashid)
{
return base.iClient.GetHashKeys(hashid);
}
/// <summary>
/// 获取hashid数据集中的所有value集合
/// </summary>
public List<string> GetHashValues(string hashid)
{
return base.iClient.GetHashValues(hashid);
}
/// <summary>
/// 获取hashid数据集中,key的value数据
/// </summary>
public string GetValueFromHash(string hashid, string key)
{
return base.iClient.GetValueFromHash(hashid, key);
}
/// <summary>
/// 获取hashid数据集中,多个keys的value集合
/// </summary>
public List<string> GetValuesFromHash(string hashid, string[] keys)
{
return base.iClient.GetValuesFromHash(hashid, keys);
}
#endregion #region 删除
/// <summary>
/// 删除hashid数据集中的key数据
/// </summary>
public bool RemoveEntryFromHash(string hashid, string key)
{
return base.iClient.RemoveEntryFromHash(hashid, key);
}
#endregion #region 其它
/// <summary>
/// 判断hashid数据集中是否存在key的数据
/// </summary>
public bool HashContainsEntry(string hashid, string key)
{
return base.iClient.HashContainsEntry(hashid, key);
}
/// <summary>
/// 给hashid数据集key的value加countby,返回相加后的数据
/// </summary>
public double IncrementValueInHash(string hashid, string key, double countBy)
{
return base.iClient.IncrementValueInHash(hashid, key, countBy);
}
#endregion
}

添加

                //1. 添加
UserInfo userInfo = new UserInfo() { Id = 3, Age = 50, Name = "zxl", Pwd = "123456" };
//添加第一种方式
client.SetEntryInHash("UserInfor_001", "0000", "11111");
client.SetEntryInHash("UserInfor_001", nameof(userInfo.Id), userInfo.Id.ToString());
client.SetEntryInHash("UserInfor_001", nameof(userInfo.Age), userInfo.Age.ToString());
client.SetEntryInHash("UserInfor_001", nameof(userInfo.Name), userInfo.Name.ToString());
client.SetEntryInHash("UserInfor_001", nameof(userInfo.Pwd), userInfo.Pwd.ToString());
//不存在则添加
bool b1= client.SetEntryInHashIfNotExists("UserInfor_001", nameof(userInfo.Pwd), userInfo.Pwd.ToString());
bool b2= client.SetEntryInHashIfNotExists("UserInfor_001", "潇洒", "小康1000000");
UserInfo userInfo2 = new UserInfo() { Id = 4, Age = 60, Name = "萧十一郎", Pwd = "123456" };
UserInfo userInfo3 = new UserInfo() { Id = 5, Age = 66, Name = "萧十一郎66", Pwd = "123456" };
//添加第二种方式 UserInfo 必须有Id属性
client.StoreAsHash<UserInfo>(userInfo2);
client.StoreAsHash<UserInfo>(userInfo3);

获取

                //2.获取
string hashId = "UserInfor_001";
//获取所有hashid数据集的key / value数据集合
Dictionary<string, string> data1 = client.GetAllEntriesFromHash(hashId);
//获取hashid的数据总数
long data2 = client.GetHashCount(hashId);
//获取hashid数据集中所有key的集合
List<string>data3= client.GetHashKeys(hashId);
//获取hashid数据集中的所有value集合
List<string> data4= client.GetHashValues(hashId); UserInfo data5= client.GetFromHash<UserInfo>(hashId);
//单个value的读取
string age = client.GetValueFromHash(hashId, nameof(userInfo.Age));
string name = client.GetValueFromHash(hashId, nameof(userInfo.Name));

删除

 //3. 删除
client.RemoveEntryFromHash(hashId, nameof(userInfo.Pwd));

修改

//4. 修改
client.SetEntryInHash(hashId, nameof(userInfo.Name), "zzzxxxlll");

C# 通过ServiceStack 操作Redis——Hash类型的使用及示例的更多相关文章

  1. C# 通过ServiceStack 操作Redis——String类型的使用及示例

    1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...

  2. C# 通过ServiceStack 操作Redis——Set类型的使用及示例

    ServiceStack 程序集里面没有方法注解,我在这里将注解添加上去,有不当之处,欢迎指正 Console.WriteLine("---Set类型---"); //添加 set ...

  3. C# 通过ServiceStack 操作Redis——List类型的使用及示例

    Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销, /// <summary> /// Redis list的实现为一个双向链表 ...

  4. C# 通过ServiceStack 操作Redis——ZSet类型的使用及示例

    Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列 /// <summary> /// Sorted Sets是将 ...

  5. Redis hash 类型及操作

    原文:http://blog.sina.com.cn/s/blog_5f044a4d0102v01k.html Redis hash是一个string类型的field和value的映射表.它的添加.删 ...

  6. Redis学习第三课:Redis Hash类型及操作

    Redis hash是一个string类型的field和value的映射表.它的添加.删除操作都是O(1)(平均).hash特别适用于存储对象.相较于对象的每个字段存在单个string类型.将一个对象 ...

  7. Redis - hash类型操作

    hash 类型操作设置操作:hset:    hset key filed value        创建指定key的filed-value名值对 hsetnx:    hsetnx key file ...

  8. redis hash 类型的操作命令

    redis 文档: https://redis.readthedocs.io/en/2.4/index.html keys * type key --------------------------- ...

  9. C#操作Redis Hash数据表

    /// <summary> /// Redis Hash /// </summary> public static void Redis_Hash() { RedisClien ...

  10. servicestack操作redis

    tatic void Main(string[] args) { );//redis服务IP和端口 #region =insert= var storeMembers = new List<st ...

随机推荐

  1. Go语言实现GoF设计模式:适配器模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:适配器模式>,作者:元闰子. 简介 适配器模式(Adapter)是最常用的结构型模式之一,在现实生活中,适配器模式也是处处可见 ...

  2. [ARC122E] Increasing LCMs

    Problem Statement We have a sequence of $N$ positive integers: $A_1,A_2,\cdots,A_N$. You are to rear ...

  3. [转载] Winform WebBrowser 使用 Edge 内核

    原文地址 C# 设置 WebBrowser 使用 Edge 内核_c# webbrowser 内核 - CSDN 博客 原文内容 1. 问题描述 用 C# 写了一个小工具, 需要显示网页上的内容, 但 ...

  4. MySQL运维4-Mycat入门

    一.mycat概述 mycat是阿里巴巴企业下的开源的,基于JAVA语言编写的MySQL数据库中间件,可以像使用MySQL一样来使用Mycat,对于开发人员来说根本感觉不到mycat的存在.之前在国内 ...

  5. AI量化策略会:可以直接上实盘的策略构建方法

    一年一度的培训虽晚但到,这是BigQuant与大家走过的第五个培训年头,在过去的四年里看到很多学员的成长和蜕变,从一开始的懵懂无知,到现在对深度学习的信手拈来,BigQuant与各位学员们一样都收获颇 ...

  6. 如何通过port-forward命令在本地访问 k8s 集群服务

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 概述 在我们访问k8s中的pod服务时,一般通过node port映射pod端口进行访问,还有一种是通过ingress或者i ...

  7. thymeleaf使用

    thymeleaf使用 1.依赖 <parent> <artifactId>spring-boot-starter-parent</artifactId> < ...

  8. elastic常用api

    elasticsearch运维常用API 查看集群状态 查询集群状态命令: curl -XGET "http://ip:port/_cluster/health?pretty" # ...

  9. spring-mvc 系列:拦截器和异常处理器(HandlerInterceptor、HandlerExceptionResolver)

    目录 一.拦截器的配置 二.拦截器的三个抽象方法 三.多个拦截器的执行顺序 四.基于配置的异常处理器 五.基于注解的异常处理器 一.拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 ...

  10. react路由权限v6

    方法 1.模拟vue的路由拦截(未尝试) 2.进入页面拦截(模拟后台管理系统) route v6常用属性 页面梳理 路由表 公共路由 权限路由 layout(+权限判定) 登录 页面布局 路由表 点击 ...