• Redis五大数据类型——List


    Redis五大数据类型——List

    基本的数据类型:列表

    在redis里面,我们可以把list当作队列,或栈来使用。

    在redis里,所有list的命令都是l开头的

    127.0.0.1:6379> LPUSH list one	# 将一个值或多个值放到列表的头部(栈)
    (integer) 1
    127.0.0.1:6379> LPUSH list two
    (integer) 2
    127.0.0.1:6379> LPUSH list three
    (integer) 3
    127.0.0.1:6379> LRANGE list 0 -1
    1) "three"
    2) "two"
    3) "one"
    
    127.0.0.1:6379> RPUSH list four		# 将一个值或多个值,插入到列表尾部(右,队列)
    (integer) 4
    127.0.0.1:6379> LRANGE list 0 -1	# 获取列表中的所有值
    1) "three"
    2) "two"
    3) "one"
    4) "four"
    
    127.0.0.1:6379> LPOP list			# 移除最左边的元素(栈),有返回值,返回值是被移除的值
    "three"
    127.0.0.1:6379> RPOP list			# 移除最右边的元素(队列),有返回值,返回值是被移除的值
    "four"
    127.0.0.1:6379> LRANGE list 0 -1
    1) "two"
    2) "one"
    
    127.0.0.1:6379> LINDEX list 1		# 通过下标获取list中索引的值
    "one"
    127.0.0.1:6379> LINDEX list 0
    "two"
    
    127.0.0.1:6379> LLEN list			# 查看list长度
    (integer) 2
    
    # ==========
    127.0.0.1:6379> keys *
    1) "list"
    127.0.0.1:6379> LRANGE list 0 -1
    1) "three"
    2) "four"
    3) "three"
    4) "two"
    5) "one"
    
    127.0.0.1:6379> LRANGE list 0 -1
    1) "three"
    2) "four"
    3) "three"
    4) "two"
    
    127.0.0.1:6379> LREM list 1 three # LREM key count element,移除列表key中count数量的指定元素
    (integer) 1
    127.0.0.1:6379> LRANGE list 0 -1
    1) "four"
    2) "three"
    3) "two"
    
    127.0.0.1:6379> LPUSH list three
    (integer) 4
    127.0.0.1:6379> LREM list 2 three
    (integer) 2
    127.0.0.1:6379> LRANGE list 0 -1
    1) "four"
    2) "two"
    
    # ==========
    127.0.0.1:6379> keys *
    (empty array)
    127.0.0.1:6379> RPUSH list "v1" "v2" "v3" "v4"
    (integer) 4
    127.0.0.1:6379> LTRIM list 1 2		# 通过下标截取指定的长度
    OK
    127.0.0.1:6379> LRANGE list 0 -1	# 这个list已经被改变了,发现只剩下了截取的元素
    1) "v2"
    2) "v3"
    
    # ==========
    127.0.0.1:6379> RPUSH list "v1" "v2" "v3" "v4"
    (integer) 4
    127.0.0.1:6379> RPOPLPUSH list otherl	# 移除列表中的最后一个元素,并把该元素添加到新的列表中
    "v4"
    127.0.0.1:6379> lrange list 0 -1
    1) "v1"
    2) "v2"
    3) "v3"
    127.0.0.1:6379> lrange otherl 0 -1
    1) "v4"
    
    # ==========
    127.0.0.1:6379> LPUSH list v1
    (integer) 1
    127.0.0.1:6379> LSET list 0 v2		# 设置名为key的列表中,下标为index的值为element
    OK
    127.0.0.1:6379> LRANGE list 0 -1	# 发现相当于做了一个update的操作
    1) "v2"
    127.0.0.1:6379> LSET list 1 v3		# 下标为1的元素不存在,所以报错
    (error) ERR index out of range
    
    # ==========
    # LINSERT key BEFORE|AFTER pivot element	# 在名为key的列表中,在某个值的前面或后面插入一个值
    127.0.0.1:6379> RPUSH list "v1" "v2"
    (integer) 2
    127.0.0.1:6379> LINSERT list before "v2" "v3"
    (integer) 3
    127.0.0.1:6379> LRANGE list 0 -1
    1) "v1"
    2) "v3"
    3) "v2"
    
    127.0.0.1:6379> LINSERT list after v3 v4
    (integer) 4
    127.0.0.1:6379> LRANGE list 0 -1
    1) "v1"
    2) "v3"
    3) "v4"
    4) "v2"
    

    小结

    • 列表实际上是一个链表,before Node after,left,right都可以插入值
    • 如果key不存在,创建新的链表
    • 如果key存在,新增内容
    • 如果移除了key,空链表,也代表不存在
    • 在两边插入或改动值,效率最高。对于中间元素,相对来说效率会低一些

    消息排队,消息队列(Lpush Rpop),栈(Lpush,Lpop)

  • 相关阅读:
    关于setTimeout的妙用
    JavaScript中四种不同的属性检测方式比较
    AngularJS中transclude用法详解
    Token:服务端身份验证的流行方案
    浅析网页meta标签中X-UA-Compatible属性的使用
    谈谈近期学习Nativejs和reactNative的一些感受
    关于EasyUI DataGrid行编辑时嵌入时间控件
    全局程序集缓存工具(Gacutil.exe)用法详解
    JAVA从基础到框架搭建网站
    Swagger UI使用指南
  • 原文地址:https://www.cnblogs.com/liuhuan086/p/13580275.html
Copyright © 2020-2023  润新知