redis 系列:三、数据结构

结构介绍

  • redis 是一种高级的key-value的存储系统,其中value支持五种数据类型。
    • 字符串(String)
    • 哈希(Hash)
    • 字符串列表(List)
    • 字符串集合(Set)
    • 有序字符串集合(Sorted Set)
  • 关于key的注意事项
    • key不可以太长,会消耗内存,降低查询效率
    • key不可以太短,会降低key的可读性
    • key最好有一个统一的命名规范

String 结构

概述

  • 字符串类型是redis最基础的数据类型。
  • 字符串类型在redis中是二进制安全的,这便意味着该类似的数据存入和获取的数据是相同的。
  • 字符串类型的value可以容纳的数据长度最大为512M

命令

  • 赋值:set key value
  • 取值:get key
    • 如果获取到的value不是String类型,redis会报错。
    • 因为get命令只能用于获取String value。
    • 如果redis中没有该key,则返回nil。
  • 取值 + 赋值:getset key value
  • 删除:del key
  • 递增1:incr key
    • 将key对应的value转成整型,然后原子性增1
    • 如果key不存在,则初始化为0,增1后变成1
    • 如果key对应的value转换不成整形,则redis会报错
  • 递减1:decr key
    • 和 incr key 相反
  • 递增n:incrby key n
  • 递减n:decr key n
  • 拼接字符串:append key value
    • 如果key存在,则拼接;如果不存在,则初始化为value

Hash 结构

概述

  • 一个 hash,就相当于java的hashmap,里面存储很多的String key和String value
  • 每个 hash 里面最多可以存储4294967295个键值对

命令

  • 赋值:hset key field value,为指定的key设定field/value(键值对)
  • 赋值:hmset key field value field2 value2 … 为指定的key一次性设定多个field/value(键值对)
  • 取值:hget key field,返回key中field对应的value值
  • 取值:hmget key field field2… 获取key中多个field对应的value值
  • 取值:hgetall key,获取key中所有的field和value
  • 删除:hdel key field field2 … 删除key中的一个或多个字段
  • 删除:del key,删除整个key
  • 递增n:hincrby key field n
  • 递减n:hdecrby key field n
  • 判断:hexists key field,判断key中是否存在field
  • 查询:hlen key,查询key中包含的field的数量
  • 查询:hkeys key,查询key中所有的field
  • 查询:hvals key,查询key中所有的value

List 结构

概述

  • list 类型就是按照插入顺序排序的字符串列表,类似java的LinkedList
  • list 中最多可以包含4294967295个元素
  • 性能:如果在列表的两头去插入或者删除元素,性能快;如果在列表的中间去插入或者删除元素,性能慢
  • 插入时,如果key不存在,则自动创建一个key列表
  • 删除时,如果所有的元素都被移除,则自动删除该列表

命令

  • 头部添加:lpush key value value2 … 在列表key的头部添加一个或者多个value
  • 尾部添加:rpush key value value2 … 在列表key的尾部添加一个或者多个value
  • 查看列表:lrange key start end,获取列表key中从start到end之间的元素
    start、end从0开始计数,如果为-1代表倒数第一个,-2代表倒数第二个
  • 头部弹出:lpop key,返回并弹出列表key中的第一个元素
  • 尾部弹出:rpop key,返回并弹出列表key中的最后一个元素
  • 查询:llen key,查询列表key中所有元素的个数
  • 添加:lpushx key value,如果key存在,则在其头部插入value,否则不插入
  • 添加:rpushx key value,如果key存在,则在其尾部插入value,否则不插入
  • 删除:lrem key n value,删除key中n个值为value的元素,如果n>0,则从头遍历,删除n个值为value的元素;如果n<0,则从尾遍历,删除n个值为value的元素;如果n=0,则删除所有值为value的元素
  • 重置:lset key index value,设置列表key中脚标为index的元素的值
  • 插入:linsert key before|after pivot value,在列表key的pivot元素前|后插入value元素
  • 循环:rpop|rpush resource destination,从列表的尾部弹出并添加到头部
    该命令较多用于消息队列中的信息交换

Set 结构

概述

  • Set结构就是没有排序的字符串集合
  • 一个Set最多可以插入4294967295个元素
  • 与List结构的区别
    • Set结构不允许出现重复元素
    • 在服务器端完成多个Set集合的聚合(unions、intersections、differences)计算时,效率极高

命令

  • 添加:sadd key value、value1 …
  • 删除:srem key value、value1 …
  • 查询所有元素:smembers key
  • 判断元素是否存在:sismember key value 1:存在;0:元素不存在或者key不存在
  • 差集运算:sdiff key1 key2
    • 返回key1中与key2相差的元素,即返回key1中key2没有的元素,注意与key的顺序有关
  • 交集运算:sinter key1 key2
    • 返回key1和key2都有的元素
  • 并集运算:sunion key1 key2
    • 返回key1有或者key2有的元素
  • 查询key中元素的数量:scard key
  • 随机获取key中的一个元素:srandmember key
  • 存储差集:sdiffstore dest src1 src2(将src1和src2的差集存储在dest中)
    • 存储交集、存储并集类比

Sorted - Set 结构

概述

  • Sorted-Set结构和Set 结构大致类似
  • 区别如下:
    • Sorted-Set结构中每个元素都有一个对应的score与之关联
    • Sorted-Set结构通过score分数对元素进行从小到大的排序
    • Sorted-Set结构中元素不可以重复,但是对应的score却可以相同
    • Sorted-Set结构中增删改查都是非常快速的操作

命令

  • 添加:zadd key score1 value1 score2 value2
  • 查询:zscore key value,返回指定元素value的分数score
  • 查询:zcard key,获取集合中元素的数量
  • 查询:zrange key start end [withscores],获取脚标为start至end的元素,withscores表示同时返回分数score
  • 查询:zrevrange key start end [withscores],和上面操作一致,不同的是按照分数从大到小进行排序
  • 删除:zrem key value1 value2 … 删除指定的元素
  • 删除:zremrangebyrank key start end,按照脚标范围删除元素
  • 删除:zremrangebyscore key min max,按照分数范围删除元素

  • zrangebyscore key min max [withscores] [limit offset count],返回分数在min至max范围内的元素并按照分数从小到大进行排序,withscores 同时返回分数,limit offset count 从脚标offset的元素开始返回count个元素
  • zincrby key increment value,给指定成员增加increment分数,返回值是更改后的分数
  • zcount key min max,获取分数在min至max之间的元素个数
  • zrank key value,返回元素在集合中的位置(从小到大)
  • zrevrank key value,返回元素在集合中的位置(从大到小)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值