永发信息网

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

答案:3  悬赏:40  手机版
解决时间 2021-02-14 02:44
如何在Redis通过StackExchange.Redis 存储集合类型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条数据平均时间
全部回答
Redis里面使用intset是为了实现集合(set)这种对外的数据结构。 set结构类似于数学上的集合的概念,它包含的元素无序,且不能重复。 Redis里的set结构还实现了基础的集合并、交、差的操作。 与Redis对外暴露的其它数据结构类似,set的底层实现,随着元素类型是否是整型以及添加的元素的数目多少,而有所变化。概括来讲,当set中添加的元素都是整型且元素数目较少时,set使用intset作为底层数据结构,否则,set使用dict作为底层数据结构。
如果你仅仅为了缓存存一批量的 list 数据, 那么自己封装一个listget() 和 listset()方法吧。 我对比过使用 list 和 string 两种类型存储。 redis 的list类型和 .net领域还有所不同,实际上,它是一个双向队列,可以左右插入值。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
QQ空间蓝色字体怎么弄
索引造型会所这个地址在什么地方,我要处理点
科教频道浙江舟山背景音乐
美服LOL Vi(薇)版本登陆背景音乐
ADC cd 是什么意思?还有很多
填写图中光合作用过程的名称并回答问题:(1
扬中市住房和城乡建设局地址有知道的么?有点
【问字是什么结构】问是什么结构的字?
空调为什么一直运行
2.258四舍五入多少
商丘大北农饲料有限公司地址在哪,我要去那里
QQ本地视频怎么会无缘无故有不干净的视频,文
家用电器名称大全
2019年课课练小学英语AB卷六年级上册译林版答
大同村怎么去啊,我要去那办事
推荐资讯
买科目一多少钱呀
我托运的行李不见了,怎么办
我有一颗钻 请大家把我鉴定一下 值多少钱检验
张家港张高中的校服是“太阳花”吗?如果不是
【成长路上洒满阳光】让成长的道路上洒满阳光
从津南葛沽到北京怎么去最快?最方便?
苗凤村地址在哪,我要去那里办事
梦缘教育地址在什么地方,想过去办事
心搏骤停最简便最可靠的诊断指标是A.意识丧失
200+300=?等于多少
财务管理:分三年付款,1至3年每年年初分别支付
尚都瓷业我想知道这个在什么地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?