问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-08 02:03

我来回答

3个回答

懂视网 时间:2022-04-08 06:25

.0.1:6379> lpush mylist1 world (integer) 1 redis 127.0.0.1:6379> lpush mylist1 hello (integer) 2 redis 127.0.0.1:6379> lrange mylist1 0 -1 1) "hello" 2) "world"

 

2. rpush

     在key对应list的尾部添加字符串。

redis 127.0.0.1:6379> rpush mylist2 bbb
(integer) 1
redis 127.0.0.1:6379> rpush mylist2 aaa
(integer) 2
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "bbb"
2) "aaa"

 

3. linsert

   在key对应的list的特定位置前或后添加字符串。

redis 127.0.0.1:6379> rpush mylist3 world
(integer) 1
redis 127.0.0.1:6379> linsert mylist3 before world hello
(integer) 2
redis 127.0.0.1:6379> lrange mylist3 0 -1
1) "hello"
2) "world"

 

4. lset

   设置list中指定下标的元素值。

redis 127.0.0.1:6379> rpush mylist5 world
(integer) 1
redis 127.0.0.1:6379> lset mylist5 0 hello
OK
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "hello"

 

5 lrem

   从key对应list中删除n个和value相同的元素。( n < 0 从未删除, n =0 全部删除)

redis 127.0.0.1:6379> rpush mylist6 hello
(integer) 1
redis 127.0.0.1:6379> rpush mylist6 hello
(integer) 2
redis 127.0.0.1:6379> lrem mylist6 1 hello
(integer) 1

 

6 ltrim

  保留指定key 的范围内的数据。

redis 127.0.0.1:6379> rpush mylist8 one
(integer) 1
redis 127.0.0.1:6379> rpush mylist8 two
(integer) 2
redis 127.0.0.1:6379> ltrim mylist8 1 -1
OK
redis 127.0.0.1:6379> lrange mylist8 0 -1
1) "two"

 

7 lpop

  从list的头部删除元素,并返回删除元素。

redis 127.0.0.1:6379> rpush mylist11 one
(integer) 1
redis 127.0.0.1:6379> rpush mylist11 two
(integer) 2
redis 127.0.0.1:6379> rpush mylist11 three
(integer) 3
redis 127.0.0.1:6379> lpop mylist11
"one"
redis 127.0.0.1:6379> lrange mylist11 0 -1
1) "two"
2) "three"

 

8.rpoplpush

   从第一个list的尾部移出元素并添加到第二个list的头部。

redis 127.0.0.1:6379> rpush mylist12 one
(integer) 1
redis 127.0.0.1:6379> rpush mylist12 two
(integer) 2
redis 127.0.0.1:6379> rpush mylist13 aaa
(integer) 1
redis 127.0.0.1:6379> rpush mylist13 bbb
(integer) 2
redis 127.0.0.1:6379> rpush mylist13 ccc
(integer) 3
redis 127.0.0.1:6379> rpoplpush mylist12 mylist13
"two"
redis 127.0.0.1:6379> lrange mylist12 0 -1
1) "one"
redis 127.0.0.1:6379> lrange mylist13 0 -1
1) "two"
2) "aaa"
3) "bbb"
4) "ccc"

 

9 lindex

   返回名称为key的list中index位置的元素。

redis 127.0.0.1:6379> lrange mylist13 0 -1
1) "two"
2) "aaa"
3) "bbb"
4) "ccc"
redis 127.0.0.1:6379> lindex mylist13 0
"two"
redis 127.0.0.1:6379> lindex mylist13 1
"aaa"
redis 127.0.0.1:6379> lindex mylist13 2
"bbb"

 

10 llen

   返回key对应list的长度。

redis 127.0.0.1:6379> llen mylist13
(integer) 4
redis 127.0.0.1:6379> lrange mylist13 0 -1
1) "two"
2) "aaa"
3) "bbb"
4) "ccc"

 

深入浅出Redis04使用Redis数据库(lists类型)

标签:

热心网友 时间:2022-04-08 03:33

解决方案
如果你仅仅为了缓存存一批量的 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条数据平均时间


热心网友 时间:2022-04-08 04:51

Redis里面使用intset是为了实现集合(set)这种对外的数据结构。  set结构类似于数学上的集合的概念,它包含的元素无序,且不能重复。  Redis里的set结构还实现了基础的集合并、交、差的操作。  与Redis对外暴露的其它数据结构类似,set的底层实现,随着元素类型是否是整型以及添加的元素的数目多少,而有所变化。概括来讲,当set中添加的元素都是整型且元素数目较少时,set使用intset作为底层数据结构,否则,set使用dict作为底层数据结构。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么样的猫叫起司猫? 2021年春节后工地普遍是哪天开工? 美国大学介绍——印第安纳大学伯明顿分校 480-500分之间的大学有哪些 平安驾意险需要买两份保险吗? AI编译器技术剖析(一)-概述 AI编译器技术剖析(三)-树模型编译工具 Treelite 详解 研究性学习:人工智能产品的个人使用情况调研 全球变化中国现阶段水资源概况 我国水资源人均占有量现在只有 骑马好不好对身体 怎么查询身份证信息?看名字跟身份证号码对不对。如何识别假的? 怎么把手机摔坏 而屏幕不会坏 到底先隔离后防晒?还是先防晒后隔离?? 到底是先隔离后防晒还是先防晒再隔离 符号名字怎么打出来一模一样的 手机屏幕什么材质不易摔坏 有什么办法可以让手机屏幕不摔坏 符号名字都是那些键 怎样正确手拿手机才能防止摔坏屏幕,我好几次差点把手机屏幕给摔坏了,还有怎样保护好手机,简单实用的方 先防晒后隔离,还是先隔离后防晒 梦幻符号名字 请问隔离霜和防晒霜究竟应该哪个先哪个后? 是不是贴了钢化膜手机屏幕就不会摔坏了 先隔离后防晒还是先防晒后隔离 王者荣耀名字特殊符号名字? 梦幻西游好听好看的符号名字 我想从事金融行业,请问我该怎么进入这个行业? 应该看些什么书,或者在哪可以接受到这方面的教育 王者荣耀蝴蝶符号名字有哪些? 护身符有哪些 85年属牛二次婚姻在几岁 属牛一九八五年出生,今年的感情如何? 一九八五年属牛婚配猪 1985年属牛的婚姻,子女运 95年属牛男和什么属相最配 85年出生属牛的女人对婚姻与家庭 85年男属牛的一生的婚姻怎么样 一九八五年属牛女的一辈子命运 一九八五年是属牛的人和属猴的人结婚好吗 一九八五年属牛农历十二月二十五日算命 1982年属狗和1985年属牛的女生婚姻怎么样 一九八五年属牛农历十二月二十五日八点半算命 属牛85年,男孩,命运如何,婚姻如何, 我国最早计算工具是什么? 什么是最早的计算工具? 最早的计算工具是什么? 我国最早的计算工具是算筹吗? 世界上最早的计算器是什么? 算盘是世界上最早的计算器吗? 最原始的计算工具是什么呢?