怎样在Redis通过StackExchange.Redis 存储集合类型List
StackExchange 是由StackOverFlow出品, 是对Redis的.NET封装,被越来越多的.NET开发者使用在项目中。
绝大部分原先使用ServiceStack的开发者逐渐都转了过来,由于SS在其新版中不再开源,并对免费版本有所限制。
实际问题
那么用.NET的开发者会发现,其根本没有对List类型的存储封装,那么要实现一个类似如下需求:
假如我有一个Customer的模型。
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string City { get; set; }
public string State { get; set; }
}
var customers = new List<Customer>();
怎样将List<customer> customers 存入Redis中呢?
来龙去脉
是由于StackExchange.Redis是一个纯客户端的代理,他仅仅实现了Redis自由的功能,并不额外封装其它功能。 也不具备像ORM那样的自动类型匹配。
他仅仅存储键值对 像string 或者 byte[]。所以你明白了吧,必须序列化存储,用类似Json格式一样。像用第三方NewtonSoft或者是Google公司流行的Protocol Buffers 序列化格式的Protobuf-Net 也是不错的选择。
Redis支持存储的类型有五种String ,Hash ,List ,Set ,和 Sorted Set, 正如上面说的,这些存储类型全部由字符串构成。
其中Set类型是没有顺序的,并且值必须唯一, List类型有顺序且允许重复。
解决方案
如果你仅仅为了缓存存一批量的 List<Customer> 数据, 那么自己封装一个ListGet() 和 ListSet()方法吧。
我对比过使用 List 和 String 两种类型存储。
Redis 的List类型和 .NET领域还有所不同,实际上,它是一个双向队列,可以左右插入值。
所以如果是批量数据插入 那么必须一个个插入, 代码比较简单如下:
//封装的ListSet
public void ListSet<T>(string key, List<T> value)
{
.....
//下面的database 是redis的数据库对象.
foreach (var single in value)
{
var s = ConvertJson(single); //序列化
database.ListRightPush(key, s); //要一个个的插入
}
}
//封装的ListGet
public void ListGet<T>(string key)
{
...
//ListRange返回的是一组字符串对象
//需要逐个反序列化成实体
var vList = database.ListRange(key) ;
List<T> result = new List<T>();
foreach (var item in vList)
{
var model = ConvertObj<T>(item); //反序列化
result.Add(model);
}
return result;
}
当然测试了一下性能,取20W条数据平均时间
测试效果如下:
获取10000条数据,平均时间大概793.78毫秒.
/// <summary>
/// 存储List
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="value"></param>
public void ListSet<T>(string key, List<T> value)
{
db.StringSet(key, ConvertJson(value));
}
/// <summary>
/// 获取指定key的List
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public List<T> ListGet<T>(string key)
{
return ConvetList<T>(db.StringGet(key));
}
当然也必须试一下String 方式的类型存储啦,代码如下:
原文地址:http://www.cnblogs.com/Mikor/p/6223931.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
怎样在Redis通过StackExchange.Redis 存储集合类型List相关推荐
- (三)Redis for StackExchange.Redis
目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis StackExchange.Re ...
- stackexchange.mysql_.net core使用redis基于StackExchange.Redis
.net core使用redis基于StackExchange.Redis教程,具体如下 一.添加引用包 StackExchange.Redis Microsoft.Extensions.Config ...
- Redis应用(五)---集合类型
介绍 Redis支持两种集合分别是有序集合和无序集合 集合和列表之间的对比 集合类型 列表类型 有序集合类型 存储内容 最多 2 32 − 1 2 ^ {32} - 1 232−1个字符串 最多 2 ...
- .net core 使用redis 基于 StackExchange.Redis
一.添加引用包 StackExchange.Redis Microsoft.Extensions.Configuration 二.修改配置文件 appsettings.json {"Redi ...
- 15天玩转redis —— 第六篇 有序集合类型
今天我们说一下Redis中最后一个数据类型 "有序集合类型",回首之前学过的几个数据结构,不知道你会不会由衷感叹,开源的世界真好,写这 些代码的好心人真的要一生平安哈,不管我们想没 ...
- StackExchange.Redis通用封装类分享(转)
阅读目录 ConnectionMultiplexer 封装 RedisHelper 通用操作类封 String类型的封装 List类型的封装 Hash类型的封装 SortedSet 类型的封装 key ...
- StackExchange.Redis 官方文档(二) Configuration
配置 有多种方式可以配置redis,StackExchange.Redis提供了一个丰富的配置模型,在执行Connect (or ConnectAsync) 时被调用: var conn = Conn ...
- netcore redis 存储集合_.net core redis的全套操作
摘要: 发布订阅 2.在.netcore中的调用订阅:redisManager.Subscribe("dylan",(channel,value)=>{Console.Wri ...
- netcore redis 存储集合_Redis的简单入门
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...
最新文章
- 每日算法练习之括号配对
- Marketing Cloud的contact merge机制
- JDK 8 新特性 之 default关键字
- 一个iOS表单框架-UFKit
- 过山车99java游戏_过山车乐园游戏下载
- java 排序 1和1_新手入门-冒泡排序和选择排序第一节排序1.1排序概述排序(
- 解决SQL Server 连接时的一些基本问题后的若干初浅心得
- 网站优化工具-YUI Compressor
- (一)hadoop 权威指南---气象数据获取
- 使用海康H5视频播放器开发包实现监控播放
- 必刷2022年辽宁最新消防设施操作员模拟题库及答案
- Basic4Android简单教程(从安装到编译部署到手机)
- Typora字体设置
- 《程序员情商》沟通能力练习基本功——趣味绕口令
- JavaScript验证身份证号码(15位/18位)
- python爬取百度的工具_Python爬虫之小试牛刀——使用Python抓取百度街景图像
- 数据结构-树-愿天下有情人都是失散多年的兄妹
- Redis缓存(三)缓存异常的四个方面:数据同步、缓存雪崩、击穿、穿透
- c语言的编程switch,C语言之switch详解
- 抖音服务器究竟有多大,为什么能够供那么多人同时刷?