永发信息网

如何在Redis通过StackExchange.Redis 存储集合类型List

答案:3  悬赏:40  手机版
解决时间 2021-02-14 02:44
  • 提问者网友:自食苦果
  • 2021-02-13 19:38
如何在Redis通过StackExchange.Redis 存储集合类型List
最佳答案
  • 五星知识达人网友:duile
  • 2021-02-13 20:15
解决方案
如果你仅仅为了缓存存一批量的 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条数据平均时间
全部回答
  • 1楼网友:不想翻身的咸鱼
  • 2021-02-13 22:14
Redis里面使用intset是为了实现集合(set)这种对外的数据结构。 set结构类似于数学上的集合的概念,它包含的元素无序,且不能重复。 Redis里的set结构还实现了基础的集合并、交、差的操作。 与Redis对外暴露的其它数据结构类似,set的底层实现,随着元素类型是否是整型以及添加的元素的数目多少,而有所变化。概括来讲,当set中添加的元素都是整型且元素数目较少时,set使用intset作为底层数据结构,否则,set使用dict作为底层数据结构。
  • 2楼网友:何以畏孤独
  • 2021-02-13 20:39
如果你仅仅为了缓存存一批量的 list 数据, 那么自己封装一个listget() 和 listset()方法吧。 我对比过使用 list 和 string 两种类型存储。 redis 的list类型和 .net领域还有所不同,实际上,它是一个双向队列,可以左右插入值。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯