当前位置:网站首页>.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);
边栏推荐
- 议程速递 | 7月27日分论坛议程一览
- SPARK中 DS V2 push down(下推)的一些说明
- Data communication foundation telnet remote management equipment
- 记给esp8266烧录刷固件
- mysql 进不去了怎么办
- Perfect / buffer motion framework in sentence parsing JS (for beginners)
- 将json文件中数组转换为struct
- Function templates and non template functions with the same name cannot be overloaded (definition of overloads)
- js下载文件,FileSaver.js导出txt、excel文件
- The difference between equals and = =
猜你喜欢
随机推荐
抓包工具fiddler和wireshark对比
The difference between equals and = =
Tradingview 使用教程
软件打不开了
QRcode二维码(C语言)遇到的问题
Learning about tensorflow (I)
js,e.pageX、pageY模态框拖动
Introduction to data analysis | kaggle Titanic mission
【Halcon视觉】阈值分割
[Halcon vision] polar coordinate transformation
分布式锁解决方案之Redis实现
【C#语言】具名类型和匿名类型
Modelsim installation tutorial (application not installed)
L2-005 集合相似度(vector、set求并交集)
Navicat15连接本地虚拟机的Mysql(Centos7)
Introduction to data analysis | kaggle Titanic mission (I) - > data loading and preliminary observation
Our Web3 entrepreneurship project is yellow
Google与Pixar开发Draco支持USD格式 加速3D对象传输&lt;转发&gt;
All codes of Tetris
Review of database -- 3. SQL language






![[Halcon vision] programming logic](/img/1a/b6daac946fbefd8337355dc8b7873e.png)
![[Halcon vision] affine transformation](/img/f1/32284c71e78e6eea390fdb6058ba0f.png)
