当前位置:网站首页>.NET操作Redis Hash对象
.NET操作Redis Hash对象
2022-07-26 10:29:00 【矿工学编程】
一、Hash对象概述
哈希在很多编程语言中都有着很广泛的应用,而在Redis中也是如此,在redis中,哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},...{fieldN,valueN}]。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
二、使用场景
Redis哈希对象常常用来缓存一些对象信息,如用户信息、商品信息、配置信息等。
三、.NET 操作
1、基本操作
string hashid = "kgxk";
client.SetEntryInHash(hashid, "id", "001");
Console.WriteLine(client.GetValuesFromHash(hashid, "id").FirstOrDefault());
Console.WriteLine(client.GetValuesFromHash(hashid, "name").FirstOrDefault());
client.SetEntryInHash(hashid, "socre", "100");
Console.WriteLine(client.GetValuesFromHash(hashid, "socre").FirstOrDefault());2、批量新增key的值
Dictionary<string, string> pairs = new Dictionary<string, string>();
pairs.Add("id", "001");
pairs.Add("name", "kgxk");
client.SetRangeInHash(hashid, pairs);
//获取当前key的值
Console.WriteLine(client.GetValueFromHash(hashid, "id"));
Console.WriteLine(client.GetValueFromHash(hashid, "name"));
//一次性的获取所有想要获取的小key(属性的)值 如果key不存在,则返回空,不抛出异常
var list = client.GetValuesFromHash(hashid, "id", "name", "abc");
Console.WriteLine("*********");
foreach (var item in list)
{
Console.WriteLine(item);
}3、如果hashid集合中存在key/value则不添加返回false,如果不存在在添加key/value,返回true
Console.WriteLine(client.SetEntryInHashIfNotExists(hashid, "name", "你好美"));
Console.WriteLine(client.SetEntryInHashIfNotExists(hashid, "name", "你好美 哈哈哈"));
Console.WriteLine(client.GetValuesFromHash(hashid, "name").FirstOrDefault());4、存储对象T t到hash集合中
//urn: 类名: id的值 、、如果使用对象操作,一定要有id
client.StoreAsHash<UserInfo>(new UserInfo() { Id = 1, Name = "KGXK", Number = 0 });
client.StoreAsHash<UserInfo>(new UserInfo() { Id = 2, Name = "SXY", Number = 1 });
var olduserinfo = client.GetFromHash<UserInfo>(2);
Console.WriteLine(olduserinfo.Id);//如果id存在的话,则覆盖之前相同的id 他帮助我们序列化或者反射了一些事儿
client.StoreAsHash<UserInfo>(new UserInfo() { Id = 2, Name = "KGXK2" });
//获取对象T中ID为id的数据。 必须要有属性id,不区分大小写
Console.WriteLine(client.GetFromHash<UserInfo>(1).Name);
var olduserinfo = client.GetFromHash<UserInfo>(1);
olduserinfo.Number = 4;
client.StoreAsHash<UserInfo>(olduserinfo);
Console.WriteLine("最后的结果" + client.GetFromHash<UserInfo>(1).Number);UserInfo lisi = new UserInfo() { Id = 1, Name = "李四", Number = 0 };
client.StoreAsHash<UserInfo>(lisi);
Console.WriteLine(client.GetFromHash<UserInfo>(1).Number);
//做个自增
var oldzhang = client.GetFromHash<UserInfo>(1);
oldzhang.Number++;
client.StoreAsHash<UserInfo>(oldzhang);5、获取hashid数据集中的数据总数
Dictionary<string, string> pairs = new Dictionary<string, string>();
pairs.Add("id", "001");
pairs.Add("name", "kgxk");
client.SetRangeInHash(hashid, pairs);
//获取数据总数
Console.WriteLine(client.GetHashCount(hashid));6、获取hashid数据集中所有key或value的集合
Dictionary<string, string> pairs = new Dictionary<string, string>();
pairs.Add("id", "001");
pairs.Add("name", "kgxk");
client.SetRangeInHash(hashid, pairs);
var keys = client.GetHashKeys(hashid);//key
//var values = client.GetHashValues(hashid); //value
foreach (var item in keys)
{
Console.WriteLine(item);
}7、删除hashid数据集中的key数据
Dictionary<string, string> pairs = new Dictionary<string, string>();
pairs.Add("id", "001");
pairs.Add("name", "kgxk");
client.SetRangeInHash(hashid, pairs);
client.RemoveEntryFromHash(hashid, "id");
var values = client.GetHashValues(hashid);
foreach (var item in values)
{
Console.WriteLine(item);
}8、判断hashid数据集中是否存在key
Dictionary<string, string> pairs = new Dictionary<string, string>();
pairs.Add("id", "001");
pairs.Add("name", "kgxk");
client.SetRangeInHash(hashid, pairs);
Console.WriteLine(client.HashContainsEntry(hashid, "id")); //T F
Console.WriteLine(client.HashContainsEntry(hashid, "number"));// T F9、给hashid数据集key的value加countby,返回相加后的数据
Dictionary<string, string> pairs = new Dictionary<string, string>();
pairs.Add("id", "001");
pairs.Add("name", "kgxk");
pairs.Add("number", "2");
client.SetRangeInHash(hashid, pairs);
Console.WriteLine(client.IncrementValueInHash(hashid, "number", 2));
//注意,存的值必须是数字类型,否则抛出异常10、泛型封装
public static class HashHelper
{
public static void StoreAsHash<T>(T model,RedisClient client) where T : class, new()
{
//获取当前类型的所有字段
Type type = model.GetType();
var fields = type.GetProperties();
// urn: 类名: id的值
var hashid = type.FullName;
Dictionary<string, string> pairs = new Dictionary<string, string>();
var IdValue = string.Empty;
for (int i = 0; i < fields.Length; i++)
{
if (fields[i].Name.ToLower() == "id")
{
//如果你真的把两个相同的id的对象存进去,我可能只改其中一个
//不可能,如果有两个相同的id的对象存进去,则后面的会把前面的替换掉
IdValue = fields[i].GetValue(model).ToString();
}
else
{
// 获取字段的值
pairs.Add(fields[i].Name, fields[i].GetValue(model).ToString());
}
}
if (IdValue == string.Empty)
{
IdValue = DateTime.Now.ToString("yyyyMMdd");
}
client.SetRangeInHash(hashid + IdValue, pairs);
}
public static T GetFromHash<T>(object id, RedisClient client) where T : class, new()
{
//获取当前类型的所有字段
Type type = typeof(T);
// urn: 类名: id的值
var hashid = type.FullName;
var dics = client.GetAllEntriesFromHash(hashid + id.ToString());
if (dics.Count == 0)
{
return new T();
}
else
{
var model = Activator.CreateInstance(type);
var fields = type.GetProperties();
foreach (var item in fields)
{
if (item.Name.ToLower() == "id")
{
item.SetValue(model, id);
}
if (dics.ContainsKey(item.Name))
{
item.SetValue(model, dics[item.Name]);
}
}
return (T)model;
}
}
}调用
HashHelper.StoreAsHash<UserInfoTwo>(new UserInfoTwo() { Id = "10001", Name = "MMM" }, client);
var user = HashHelper.GetFromHash<UserInfoTwo>("10001", client);
Console.WriteLine(user.Name);
Console.WriteLine(user.Id);
边栏推荐
- [gossip] error loading psychopg2 module: no module named psychopg2
- 软件打不开了
- Inheritance method of simplified constructor (II) - class inheritance in ES6
- [Halcon vision] image filtering
- 2022pta平时训练题(1~10题字符串处理问题)
- Unit test, what is unit test and why is it so difficult to write a single test
- Employee information management system based on Web
- 【socket】三次握手是在listen中完成,accept只从完成连接的队列中拿出一个连接
- 2022/07/25------字符串的排列
- Learning about opencv (4)
猜你喜欢

链式方法调用的事务问题剖析

About automatic operation on Web pages

The practice of OpenCV -- bank card number recognition

QRcode二维码(C语言)遇到的问题
![[Halcon vision] Fourier transform of image](/img/9c/d6ed4ab3e40f706f3b5b8b5cc51db9.png)
[Halcon vision] Fourier transform of image

2022/07/25 ------ arrangement of strings
![[Halcon vision] morphological corrosion](/img/f9/f01dd3340824ff28c84cf7bb52882e.png)
[Halcon vision] morphological corrosion
![[Halcon vision] morphological expansion](/img/ce/abaca036fce5b67dfe6ac361aecfea.png)
[Halcon vision] morphological expansion

【Halcon视觉】图像灰度变化

数据分析入门 | kaggle泰坦尼克任务
随机推荐
SPARK中 DS V2 push down(下推)的一些说明
[Qualcomm][Network] qti服务分析
Review of database -- 1. Overview
Introduction to data analysis | kaggle Titanic mission
【Halcon视觉】编程逻辑
Introduction to data analysis | kaggle Titanic mission (I) - > data loading and preliminary observation
【C#语言】LINQ概述
equals与==的区别
数据分析入门 | kaggle泰坦尼克任务
SAP ABAP Netweaver 容器化的一些前沿性研究工作分享
详细解析js中的混合方式构造对象(构造加属性,原型加方法)
Prevent XSS attacks
【Halcon视觉】阈值分割
String null to empty string (what does empty string mean)
链式方法调用的事务问题剖析
少了个分号
What is wrong about the description of function templates (how to solve link format errors)
【Halcon视觉】图像滤波
【Halcon视觉】仿射变换
函数模板与同名的非模板函数不可以重载(重载的定义)