Redis数据类型——List列表数组

01 Redis数据模型

在这里插入图片描述

02 List 列表数组

  • 基于Linked List实现
  • 元素是字符串类型
  • 列表头尾增删快,中间增删慢,增删元素是常态
  • 元素可以重复出现
  • 最多包含2^32-1元素

在这里插入图片描述

  • 列表的索引n从左至右,从0开始
  • 从右至左,从-1开始

list:
  • 队列:L/R R/L
  • 栈: L/L R/R
  • 数组:LINDEX LSET
  • 阻塞:BL BR

在这里插入图片描述

2.1 命令说明
B block #块,阻塞
L left #左
R right #右
X exist #存在

# 左右或者头尾压入元素  string   set key “abc”
LPUSH key value [value ...]
LPUSHX key value
RPUSH key value [value ...]
RPUSHX key value

2.2 双端队列,栈,数组
# 左右或者头尾弹出元素
LPOP key
RPOP  key

# 从一个列表尾部弹出元素压入到另一个列表的头部  string   getset
RPOPLPUSH source destination
# 返回列表中指定范围元素
LRANGE key start stop
LRANGE key 0 -1 表示返回所有元素

2.3 获取指定位置元素
# 获取指定位置的元素
LINDEX key index
# 设置指定位置元素的值
LSET key index value
# 列表长度,元素个数   string    strlen
LLEN key      LRANGE KEY 0 -1

2.4 从列表头部开始删除值等于value的元素count次,LIST 可以重复出现
LREM key count value
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
count = 0 : 移除表中所有与 value 相等的值

# 举例
RPUSH listkey c abc c ab 123 ab bj ab redis list
LREM listkey 2 ab
LRANGE listkey 0 -1

在这里插入图片描述

2.5 去除指定范围外元素
LTRIM key start stop

# 举例
RPUSH listkey c abc c ab 123 ab bj ab redis list
LTRIM listkey 0 -1
LTRIM listkey 1 -1
LTRIM listkey 1 10000
# 微博的评论最后500条:盖楼 
lpush u1234:forumid:comments comments
LTRIM u1234:forumid:comments 0 499

2.6 在列表中某个存在的值(pivot)前或后插入元素
# key和pivot不存在,不进行任何操作
LINSERT key BEFORE|AFTER pivot value


#举例
RPUSH lst Clojure C Lua

LINSERT lst AFTER  C Python
LINSERT lst BEFORE C Ruby

在这里插入图片描述
在这里插入图片描述

2.7 阻塞
# 如果弹出的列表不存在或者为空,就会阻塞
# 超时时间设置为0,就是永久阻塞,直到有数据可以弹出
# 如果多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务

# 左右或者头尾阻塞弹出元素
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout

# 从一个列表尾部阻塞弹出元素压入到另一个列表的头部
BRPOPLPUSH source destination timeout
2.8 Hash 散列
  • 由field和关联的value组成的map键值对
  • field和value是字符串类型
  • 一个hash中最多包含2^32-1键值对
    在这里插入图片描述
2.8.1 命令
#  设置单个字段,key的filed不存在的情况下执行,key不存在直接创建
HSET key field value
HSETNX key field value

# 设置多个字段
HMSET key field value [field value ...]

# 返回字段个数
HLEN key
# 判断字段是否存在,key或者field不存在,返回0
HEXISTS key field

# 返回字段值
HGET key field
#返回多个字段值
HMGET key field [field ...]
# 返回所有的键值对
HGETALL key
# 返回所有字段名
HKEYS key
# 返回所有值
HVALS key
2.8.2 在字段对应的值上进行整数的增量计算
HINCRBY key field increment
# 在字段对应的值上进行浮点数的增量计算
HINCRBYFLOAT key field increment
# 删除指定的字段
HDEL key field [field ...]


# 案例
HINCRBY numbers x 100
HINCRBY numbers x -50
HINCRBYFLOAT numbers x 3.14
HDEL numbers x

2.8.3 Hash 用途
  • 节约内存空间
  • 每创建一个键,它都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等等)
  • 所以数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,花在管理数据库键上的CPU也会越多在字段对应的值上进行浮点数的增量计算
    在这里插入图片描述
2.8.4 不适合Hash情况
  • 使用二进制位操作命令:因为Redis目前支持对字符串键进行SETBIT、GETBIT、BITOP等操作,如果你想使用这些操作,那么只能使用字符串键,虽然散列也能保存二进制数据
  • 使用过期键功能:Redis的键过期功能目前只能对键进行过期操作,而不能对散列的字段进行过期操作,因此如果你要对键值对数据使用过期功能的话,那么只能把键值对储存在字符串里面
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值