zoukankan      html  css  js  c++  java
  • 缓存数据库-redis数据类型和操作(list)

    转:

    缓存数据库-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中没有数据的时候就会阻塞,直到有结果过来
    
    
    
    
    
    "222"                  通过下面窗口发一条数据过来
    (70.24s)
    复制代码

    给nam1发送一个结果222

      

    [root@localhost ~]# redis-cli 
    127.0.0.1:6379> RPUSH name1 222
    (integer) 1
    127.0.0.1:6379> 
  • 相关阅读:
    repo
    manifest
    Gerrit使用简介
    id_rsa id_rsa.pub
    数字签名原理及其应用
    RSA DSA
    ssh(安全协议外壳)
    Numpy基本数据结构
    Numpy
    .bat 批处理
  • 原文地址:https://www.cnblogs.com/libin6505/p/10694917.html
Copyright © 2011-2022 走看看