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相关推荐

  1. (三)Redis for StackExchange.Redis

    目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis StackExchange.Re ...

  2. stackexchange.mysql_.net core使用redis基于StackExchange.Redis

    .net core使用redis基于StackExchange.Redis教程,具体如下 一.添加引用包 StackExchange.Redis Microsoft.Extensions.Config ...

  3. Redis应用(五)---集合类型

    介绍 Redis支持两种集合分别是有序集合和无序集合 集合和列表之间的对比 集合类型 列表类型 有序集合类型 存储内容 最多 2 32 − 1 2 ^ {32} - 1 232−1个字符串 最多 2 ...

  4. .net core 使用redis 基于 StackExchange.Redis

    一.添加引用包 StackExchange.Redis Microsoft.Extensions.Configuration 二.修改配置文件 appsettings.json {"Redi ...

  5. 15天玩转redis —— 第六篇 有序集合类型

    今天我们说一下Redis中最后一个数据类型 "有序集合类型",回首之前学过的几个数据结构,不知道你会不会由衷感叹,开源的世界真好,写这 些代码的好心人真的要一生平安哈,不管我们想没 ...

  6. StackExchange.Redis通用封装类分享(转)

    阅读目录 ConnectionMultiplexer 封装 RedisHelper 通用操作类封 String类型的封装 List类型的封装 Hash类型的封装 SortedSet 类型的封装 key ...

  7. StackExchange.Redis 官方文档(二) Configuration

    配置 有多种方式可以配置redis,StackExchange.Redis提供了一个丰富的配置模型,在执行Connect (or ConnectAsync) 时被调用: var conn = Conn ...

  8. netcore redis 存储集合_.net core redis的全套操作

    摘要: 发布订阅 2.在.netcore中的调用订阅:redisManager.Subscribe("dylan",(channel,value)=>{Console.Wri ...

  9. netcore redis 存储集合_Redis的简单入门

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

最新文章

  1. 每日算法练习之括号配对
  2. Marketing Cloud的contact merge机制
  3. JDK 8 新特性 之 default关键字
  4. 一个iOS表单框架-UFKit
  5. 过山车99java游戏_过山车乐园游戏下载
  6. java 排序 1和1_新手入门-冒泡排序和选择排序第一节排序1.1排序概述排序(
  7. 解决SQL Server 连接时的一些基本问题后的若干初浅心得
  8. 网站优化工具-YUI Compressor
  9. (一)hadoop 权威指南---气象数据获取
  10. 使用海康H5视频播放器开发包实现监控播放
  11. 必刷2022年辽宁最新消防设施操作员模拟题库及答案
  12. Basic4Android简单教程(从安装到编译部署到手机)
  13. Typora字体设置
  14. 《程序员情商》沟通能力练习基本功——趣味绕口令
  15. JavaScript验证身份证号码(15位/18位)
  16. python爬取百度的工具_Python爬虫之小试牛刀——使用Python抓取百度街景图像
  17. 数据结构-树-愿天下有情人都是失散多年的兄妹
  18. Redis缓存(三)缓存异常的四个方面:数据同步、缓存雪崩、击穿、穿透
  19. c语言的编程switch,C语言之switch详解
  20. 抖音服务器究竟有多大,为什么能够供那么多人同时刷?

热门文章

  1. mongoDB的副本机制
  2. Word打不开,如何修复word文档?
  3. .NET 6 新特性 PeriodicTimer
  4. 如何判断当前请求的是健康检查API
  5. SingnalR 开发到生产部署闭坑指南
  6. .NET 6 数组拷贝性能对比
  7. UOS LoongArch 上成功安装.NET Core 3.1
  8. FastTunnel - 打造人人都能搭建的内网穿透工具
  9. OneOfT1,…,Tn清新
  10. .NET开源5年了,这些宝藏你还没get?