转:

奋发博取

缓存数据库-redis数据类型和操作(list)

一:Redis 列表(List)

  Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

  一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

  List操作,redis中的List在在内存中按照一个name对应一个List来存储。如图:

  

二:列表常用操作 

  1)lpush(name,values)  在name对应的list中添加元素,每个新的元素都添加到列表的最左边

  2)rpush(name, values) 在name对应的list中添加元素,每个新的元素都添加到列表的最右边

  3)lpushx(name,value)  在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边

  4)rpushx(name, value) 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最右边

  5)llen(name) name对应的list元素的个数

  6)linsert(name, where, refvalue, value))  在name对应的列表的某一个值前或后插入一个新值

    # name,redis的name
    # where,BEFORE或AFTER
    # refvalue,标杆值,即:在它前后插入数据
    # value,要插入的数据
  7)lset(name, index, value) 对name对应的list中的某一个索引位置重新赋值
  8)lrem(name, value, num) 在name对应的list中删除指定的值
  9)lpop(name)          在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
  10)lindex(name, index)  在name对应的列表中根据索引获取列表元素
  11)lrange(name, start, end)  在name对应的列表分片获取数据
  12)ltrim(name, start, end)  在name对应的列表中移除没有在start-end索引之间的值
  13)rpoplpush(src, dst)  从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边
  14)blpop(keys, timeout) 将多个列表排列,按照从左到右去pop对应列表的元素
      
    # keys,redis的name的集合
    # timeout,超时时间,当元素所有列表的元素获取完之后,阻塞等待列表内有数据的时间(秒), 0 表示永远阻塞
    # 更多:
    # r.brpop(keys, timeout),从右向左获取数据
  15)brpoplpush(src, dst, timeout=0)

    # 从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧

    # src,取出并要移除元素的列表对应的name
    # dst,要插入元素的列表对应的name
    # timeout,当src对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞

三:示例

  

[BEGIN] 2017/7/30 20:56:36

127.0.0.1:6379> lpush name "shi"
(integer) 1
127.0.0.1:6379> lpush name "san"
(integer) 2
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
127.0.0.1:6379> RPUSH name jun
(integer) 3
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
3) "jun"
127.0.0.1:6379> LPUSHX name tianshi
(integer) 4
127.0.0.1:6379> LRANGE name 0 -1
1) "tianshi"
2) "san"
3) "shi"
4) "jun"
127.0.0.1:6379> LPUSHX name1 tianshi
(integer) 0
127.0.0.1:6379> RPUSHX name xiaoliu
(integer) 5
127.0.0.1:6379> LRANGE name 0 -1
1) "tianshi"
2) "san"
3) "shi"
4) "jun"
5) "xiaoliu"
127.0.0.1:6379> RPUSHX name1 xiaoliu
(integer) 0
127.0.0.1:6379> LLEN name1
(integer) 0
127.0.0.1:6379> LLEN name
(integer) 5
127.0.0.1:6379> LINSERT name after shi 111
(integer) 6
127.0.0.1:6379> LRANGE name 0 -1
1) "tianshi"
2) "san"
3) "shi"
4) "111"
5) "jun"
6) "xiaoliu"
127.0.0.1:6379> lset name 0 222
OK
127.0.0.1:6379> LRANGE name 0 -1
1) "222"
2) "san"
3) "shi"
4) "111"
5) "jun"
6) "xiaoliu"
127.0.0.1:6379> lrem name xiaoliu
(error) ERR wrong number of arguments for 'lrem' command
127.0.0.1:6379> LREM name xiaoliu 1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> LREM name xiaoliu 0
(error) ERR value is not an integer or out of range
127.0.0.1:6379> LRANGE name 0 -1
1) "222"
2) "san"
3) "shi"
4) "111"
5) "jun"
6) "xiaoliu"
127.0.0.1:6379> LREM name 1 xiaoliu
(integer) 1
127.0.0.1:6379> LRANGE name 0 -1
1) "222"
2) "san"
3) "shi"
4) "111"
5) "jun"
127.0.0.1:6379> lpop name
"222"
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
3) "111"
4) "jun"
127.0.0.1:6379> LINDEX name 2
"111"
127.0.0.1:6379> LTRIM name 0 2
OK
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
3) "111"
127.0.0.1:6379> LPUSH name 1 aaa
(integer) 5
127.0.0.1:6379> LPUSH name1 aaa
(integer) 1
127.0.0.1:6379> LRANGE name 0 -1
1) "aaa"
2) "1"
3) "san"
4) "shi"
5) "111"
127.0.0.1:6379> RPOPLPUSH name name1
"111"
127.0.0.1:6379> LRANGE name1 0 -1
1) "111"
2) "aaa"
127.0.0.1:6379> BLPOP name name1
(error) ERR timeout is not an integer or out of range
127.0.0.1:6379> BLPOP name name1 1
1) "name"
2) "aaa"
127.0.0.1:6379> LRANGE name 0 -1
1) "1"
2) "san"
3) "shi"
127.0.0.1:6379> LRANGE name1 0 -1
1) "111"
2) "aaa"
127.0.0.1:6379> BLPOP name name1 1
1) "name"
2) "1"
127.0.0.1:6379> BLPOP name1 name 1
1) "name1"
2) "111"
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
127.0.0.1:6379> LRANGE name1 0 -1
1) "aaa"
127.0.0.1:6379> BRPOPLPUSH name1 name 0
"aaa"
127.0.0.1:6379> BRPOPLPUSH name1 name 0 这里没有name1中没有数据的时候就会阻塞,直到有结果过来 "" 通过下面窗口发一条数据过来
(70.24s)

给nam1发送一个结果222

  

[root@localhost ~]# redis-cli
127.0.0.1:6379> RPUSH name1 222
(integer) 1
127.0.0.1:6379>

缓存数据库-redis数据类型和操作(list)的更多相关文章

  1. 缓存数据库-redis数据类型和操作(string)

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合) 一:String(字符串) string是redis ...

  2. 缓存数据库-redis数据类型和操作(sorted set)

    一:Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是 ...

  3. 缓存数据库-redis数据类型和操作(set)

    一:Redis 集合(Set) Redis的Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复 ...

  4. 缓存数据库-redis数据类型和操作(hash)

    一:Redis 哈希(Hash) Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 ...

  5. 缓存数据库redis

    什么是Redis? Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应. 服务器处理命 ...

  6. Redis数据类型及其操作

    redis数据类型即操作 1. 字符串 set 设置字符串 格式: set key value 例子: set name kainhuck get 获取字符串的值 格式: get key 例子: ge ...

  7. 缓存数据库-redis介绍

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

  8. Redis数据类型和操作

    <"Java技术员"成长手册>,包含框架.存储.搜索.优化.分布式等必备知识,都收集在GitHub JavaEgg ,N线互联网开发必备技能兵器谱,欢迎指导 Redis ...

  9. 三个缓存数据库Redis、Memcache、MongoDB

    >>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...

随机推荐

  1. C#中List<T>排序

    在面向对象开发过程中我们经常将一组对象放到一个特定集合中,此时我们通常使用泛型集合来存放,常见的如:List.Dictionary等.在使用这些泛型集合时我们有时需要对其进行排序,下面我们就一起学习下 ...

  2. 使用synchronized 实现ReentrantLock(美团面试题目)

    刚看到这个题目的时候无从下手,因为觉得synchronized和lock在加锁的方式上有很大不同,比如,看看正常情况下synchronized时如何加锁的. 方式一: public synchroni ...

  3. java.util.concurrent.TimeoutException: Idle timeout expired: 300000/300000 ms

    Request idle timed out at 123000 ms. That means there was no activity (read or write) for 123000 ms ...

  4. PHPCMS的使用

    1.下载安装phpcms 下载完后解压将install_packages上传到服务器并重命名为phpcms_test: 更改目录文件系统权限: chmod -R 777 phpcms_test 配置n ...

  5. Ehlib(Delphi控件) v9.2.024 D7-XE10.2 免费绿色特别版

    下载地址:https://www.jb51.net/softs/579413.html#downintro2 EHLib是一个DELPHI 下的非常棒的第三方Grid控件,比DELPHI自带的强大许多 ...

  6. Mybatis之执行自定义SQL举例

    本文说明如何使用Mybatis执行我自定义输入的SQL语句. 需要的mybaits文件包括:配置文件(mybatis-config-dao.xml 和 jdbc.properties).接口文件(IS ...

  7. layui 提交表格不验证

    form.on('submit(filter_save)', function (data) { 后面查找发现是提交按钮要放在form里面

  8. 今天开始学Pattern Recognition and Machine Learning (PRML),章节5.2-5.3,Neural Networks神经网络训练(BP算法)

    转载请注明出处:http://www.cnblogs.com/xbinworld/p/4265530.html 这一篇是整个第五章的精华了,会重点介绍一下Neural Networks的训练方法——反 ...

  9. Nintex History in Form Table

    一.设置参数 二.调用WebService 三.For Each 调用 四.拼写HTML Table 结果: 特别提示:过滤人只要根据人来循环即可

  10. Codeforces Round #437 Div. 1

    A:显然构造一组只包含1和2面值的数据即可. #include<iostream> #include<cstdio> #include<cmath> #includ ...