接着上一篇,下面转到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. 【开源项目推荐】-支持GPT的智能数据库客户端与报表工具——Chat2DB

    2023年是人工智能爆火的一年,ChatGPT为首的一系列的大模型的出现,让生成式人工智能彻底火了一把.但有人会说,GPT对于我们数据开发来说并没有什么作用啊? 今天为大家推荐的开源项目,就是GPT在 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (156)-- 算法导论12.3 3题

    三.用go语言,对于给定的 n 个数的集合,可以通过先构造包含这些数据的一棵二叉搜索树(反复使用TREE-INSERT 逐个插入这些数),然后按中序遍历输出这些数的方法,来对它们排序.这个排序算法的最 ...

  3. Excel对比两张表的某一列,匹配上则进行数据copy

    VLOOKUP(参数1,参数2,参数3,参数4) 参数1: 查找值 参数2:指定查找数据源的范围 参数3:返回查找区域的第几列数据 参数4:精确查找输入参数"0"or"f ...

  4. MybatisPlus实现高效的多对多查询

    1.前置 事先声明一下代码中蕴含了大量的Stream和Lambda表达式操作,还不清楚的小伙伴可以去参考一下Java8新特性Stream流,而却我是用的是MybatisPlus这方面不清楚的也可以参考 ...

  5. 火山引擎ByteHouse基于云原生架构的实时导入探索与实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着企业降本增效.智能化数据决策需求的增强,传统的商业数据库已经难以满足和响应快速增长的业务诉求.在此背景下,云原 ...

  6. Docker容器运行、使用、管理

    docker container [COMMAND] 命令: **exec 在容器中执行命令** export 将容器的文件系统导出为tar归档文件(和docker save的区别在于,save会记录 ...

  7. Linux的文件系统,根目录rootfs结构

    文件系统fs 文件系统时操作系统用来管理文件的.fs=filesystem... 在linux中,一切皆为文件,这句话够经典了吧... linux中每个分区都是一个fs. FHS Linux下的Fil ...

  8. Python+Selenium4自动化之JS属性

    应用场景 在自动化中, 能对JS代码进行增.删.改的话,可以帮助我们解决很多问题, 如:修改<a>标签的target属性,让它不打开新的窗口(_blank),从而不用频繁使用switch_ ...

  9. python异步编程之asyncio低阶API

    低阶API介绍 asyncio中低阶API的种类很多,涉及到开发的5个方面.包括: 获取事件循环 事件循环方法集 传输 协议 事件循环策略 本篇中只讲解asyncio常见常用的函数,很多底层函数如网络 ...

  10. 为什么maven配置完Tomcat且运行之后页面内容没有显示出来?

    1.如何在maven项目中配置一个webapp项目? 首先新建一个maven项目 项目目录 <?xml version="1.0" encoding="UTF-8& ...