缓存数据库-redis数据类型和操作(list) 缓存数据库-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元素的个数

扫描二维码关注公众号,回复: 5859638 查看本文章

  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> 

一: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> 

猜你喜欢

转载自www.cnblogs.com/libin6505/p/10694917.html