设为首页 加入收藏

TOP

Redis数据结构详解之List(二)(一)
2015-11-21 01:25:00 来源: 作者: 【 】 浏览:0
Tags:Redis 数据结构 详解 List
序言
思来想去感觉redis中的list没什么好写的,如果单写几个命令的操作过于乏味,所以本篇最后我会根据redis中list数据类型的特殊属性,同时对比成熟的消息队列产品rabbitmq,使用redis实现一个消息队列。?
?
为啦让本篇更有魅力,我再介绍下redis中list的基本属性,以及为什么使用redis中list列表类型,为什么使用消息队列,为什么不用rabbitmq而使用redis实现消息队列?呢,到这里为止,如果你是大咖,大牛,大神,大爷!不要听我吹牛逼啦,Close Page and forget me ! —_—?
?
首先回答序言中的4大疑问?
1、redis中的list的基本属性?
?
List数据结构是链表结构,这意味这无论数据量多大,头尾操作数据还是很快的,list的容量是2的32次方减1个元素,即4294967295个元素数量。
?
2、为什么使用redis中的list数据类型?
?
依靠redis内存中操作数据的优势,又提供一些列实用独特的Api操控数据,用着简便,速度又快,又能实现特有的数据特征排序读写,做时间轴数据,评论列表,消息传递等等,又提供简便的分页,读写操作。你用不用。
?
3、为什么使用消息队列?
?
举个简单的例子,功能是这样子的,你要呈现页面给用户看,在你呈现页面之前有一个很复杂耗时的运算要操作,但是这个操作不影响页面呈现的数据,也不作为页面呈现的数据。?
?
方案一:运算完,呈现页面。
?
方案二:把要计算的数据,抛到持久化的消息队列中,不做耗时的运算,直接呈现页面。然后用另外一个程序来对消息队列中的数据单独做运算。?
?
显而易见,方案二是最佳答案,你用不用消息队列。
?
4、为什么不使用成熟的rabbitmq而使用redis实现的消息队列??
?
Rabbitmq只关注数据的先进先出,没有数据优先级的概念,假如你想给那个数据来个先处理的特权,那么不好意思,我不支持,但是rabbitmq也可以变通着来处理,就是建立多个队列用程序路由来实现这个特权功能。那么redis实现的消息队列,是可以灵活掌控的,后面做示范。
?
Redis中关于List列表的命令详解?
1、redis中list列表的数据插入命令:lpush,rpush,linsert
?
127.0.0.1:6379>rpush mylist 1 ? ---结果为:(integer) 1
?
127.0.0.1:6379>rpush mylist 2 ? ---结果为:(integer) 2
?
127.0.0.1:6379>rpush mylist 3 ? ---rpush命令:向mylist列表中,从右边插入3条数据,返回值为当前列表的容量。结果为:(integer) 3
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---lrange命令:查看mylist列表中的数据,0开始位置,-1结束位置,结束位置为-1时,表示列表的最后一个位置,即查看所有。结果为:1> "1" ?2> "2" ?3> "3"
?
127.0.0.1:6379>lpush mylist 0 ? ---lpush命令:向mylist列表中,从左边插入一条数据为0的数据
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---结果为:1>"0" ?2>"1" ?3>"2" ?4>"3"
?
127.0.0.1:6379>linsert mylist after 3 4 ? ---linsert命令,表达式为linsert key before|after pivot value ;这句命令的意思是在key为mylist的列表中查找值为3的数据,在其后插入一条值为4的数据。
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---结果为:1>"0" ?2>"1" ?3>"2" ?4>"3" ?5>"4"
?
127.0.0.1:6379>linsert mylist before 0 -1 ? ---意思是:在key为mylist的列表中查找值为0的数据,在其前插入一条值为-1的数据。
?
127.0.0.1:6379>lrange mylist 0 -1 ? ?---结果为:1>"-1" ?2>"0" ?3>"1" ?4>"2" ?5>"3" ?6>"4"
?
127.0.0.1:6379>lisert mylist after 5 8 ? ?---结果为:-1,由于mylist列表不存在值为5的数据,所以不执行任何操作,返回状态值-1。如果key不存在时,返回错误提示。
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---结果为:1>"-1" ?2>"0" ?3>"1" ?4>"2" ?5>"3" ?6>"4"
?
2、redis中list列表的数据删除命令:lpop,rpop
?
127.0.0.1:6379>lpop mylist ? ?---lpop命令:从列表中的左边移除一条数据,同时输出被删除的数据,这里输出的结果为-1
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---结果为:1>"0" ?2>"1" ?3>"2" ?4>"3" ?5>"4"
?
127.0.0.1:6379>rpop mylist ? ---rpop命令:从列表的右边移除一条数据,同时输出被删除的数据,这里输出的结果为4
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---结果为:1>"0" ?2>"1" ?3>"2" ?4>"3"?
?
127.0.0.1:6379>ltrim mylist 1 3 ? ----ltrim命令:保留设定的两个下标区间的值,删除不在其区间的所有值。1为开始保留的下标值,3为结束保留的下标值。
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---结果为:1>"1" ?2>"2" ?3>"3"?
?
3、redis中list列表的数据查看命令:lrange,llen,lindex
?
127.0.0.1:6379>llen mylist ? ---llen命令:返回列表的长度,这里mylist只剩下4条数据,故输出结果为4
?
127.0.0.1:6379>lindex mylist 3 ? ---lindex命令:获取给定位置的数据,这里坐标为3的数据是"2",所以结果为2.
?
4、redis中list列表数据修改命令:lset
?
127.0.0.1:6379>lset mylist 2 zlh ? ---lset命令:把下标为2的值设置为zlh,如果下标值超出范围或对一个空list列表进行lset,那么将返回一个错误提示
?
127.0.0.1:6379>lrange mylist 0 -1 ? ---结果为: 1>"1" ?2>"2" ?3>"zlh"
?
5、redis中list列表,两个列表A,B,将A列表的尾元素添加到B列表的头元素中,命令:rpoplp
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MongoDb入门篇(一) 下一篇导数中的最小化日志记录:测试和..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: