Redis系列之数据类型

Redis数据类型

数据存储类型

redis数据类型类比java数据类型

redis类型java类型
stringString
hashHashMap
listLinkedList
setHashSet
sorted_setTreeSet

redis是一个Map存储结构,其中所有的数据都是采用key:value的形式存储

上述的五种存储类型,指的是value的类型

string

  • 数据:单个数据
  • 数据格式:一个存储空间保存一个数据
  • 存储内容:通常使用字符串,如果字符串以整性的形式表示,可以作为数字操作使用,例如累加等

基本操作

  • 添加/修改数据

    set key value

  • 获取数据

    get key

  • 删除数据

    del key

  • 添加/修改多个数据

    mset key1 value1 key2 value2 …

    (原set多了个m,m指Multiple-多个)

  • 获取多个数据

    mget key1 key2 …

  • 获取数据字符个数(字符串长度)

    strlen key

  • 追加信息到原始信息后面,如果存在原始信息则追加,不存在则新建

    append key value

string扩展操作

  • 设置数值数据增加指定范围的值

    incr key # 增加1

    incrby key increment # 增加指定整数值

    incrbyfloat key increment # 增加指定小数值

    increment可以为正,也可以为负

  • 设置数值数据减少指定范围的值

    decr key # 减少1

    decrby key increment #减少指定整数值

注:string在redis内部存储默认就是字符串,当遇到增减类数值操作时,如incr、decr时会转为数值型计算

按数值进行计算时,如原始数据不能转换为数值型或超过redis数值上限(java中long类型的最大值Long.MAX_VALUE:9223372036854775807=2^63-1)将会报错

  • 设置数据过期时间

    setex key seconds value # key存活指定秒

    psetex key milliseconds value # key存活指定毫秒

redis控制数据的过期时间,通过该机制来控制业务行为,例如订单过期等

string数据操作注意事项

  • 数据操作成功或失败的差异

    • 运行结果是否为成功

      • (integer)0 -> false 失败
      • (integer)1 -> true 成功
    • 运行结果值

      • (integer)3 -> 3 3个
  • 数据不存在

    • (nil)等同于null
  • 数据最大存储量

  • 512MB

  • 数值计算最大范围(java中long的最大值)

    • Long.MAX_VALUE:9223372036854775807=2^63-1

key的命名规范

热点数据命名惯例:表名:主键名:主键值:字段名

hash

对一系列存储的数据进行编组,方便管理,典型应用存储对象信息

存储结构:一个存储空间保存多个键值对数据或者理解保存了一个对象

hash类型:底层使用哈希表结构实现数据存储

基本操作

  • 添加/修改数据

    hset key field value

  • 获取数据

    hget key field

    hgetall key

  • 删除数据

    hdel key filed1 [filed2] …

  • 添加/修改多个数据

    hmset key filed1 value1 filed2 value2 …

  • 获取多个数据

    hmget key filed1 filed2 …

  • 获取哈希表中的字段数量

    hlen key

  • 获取哈希表中是否存在指定的字段

    hexists key filed

hash数据扩展操作

  • 获取哈希表中所有字段名或字段值

    hkeys key

    hvals key

  • 设置指定字段的数值数据增加指定范围值

    hincrby key filed increment

    hincrbyfloat key filed increment

hash数据操作注意事项

  • hash类型下的value只能存储字符串,不允许存储其他数据类型
  • 每个hash可以存储2^32-1个键值对
  • hash类型可以类比成一个对象存储形式,并且提供了笼火的添加删除对象属性。但hash设计初衷并不是为了存储大量对象,切勿滥用
  • hgetall操作会获取对象全部属性,如果内部filed过多,遍历整体数据效率会很低,应该需要哪个就获取哪个

list

  • 数据存储需求:存储多个数据,并保持数据进入存储空间的顺序
  • 存储结构:一个存储空间保存多个数据
  • list类型:底层使用双向链表结构实现

基本操作

  • 添加/修改数据

    lpush key value1 value2 … # 从左侧放入链表

    rpush key value1 value2 … # 从右侧放入链表

  • 获取数据

    lrange key start stop # 获取指定范围数据(按数据进入存储空间顺序) start=0 stop=-1,将获取所有元素

    lindex key index # 获取指定下标数据

    llen key # 链表长度

  • 获取并移除数据(类比队列)

    lpop key

    rpop key

list扩展操作

  • 规定时间内获取并移除数据

    blpop key1 [key2] timeout

    brpop key1 [key2] timeout

    在timeout秒时间内获取链表最左边(blpop)或最右边(brpop)的元素,如果存在则立刻取出,如果不存在元素,则监听timeout秒直到超时或者有新元素进入

  • 移除指定数据

    lrem key count value # 移除列表中和value相等的元素,如果有多个则移除count个

    • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
    • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
    • count = 0 : 移除表中所有与 VALUE 相等的值

list操作注意事项

  • list保存的数据是string类型,数据总量是有限的,最多2^32-1个元素
  • list具有索引的概念,但操作数据时通常以队列的形式进行入队出队操作或以栈形式进行 操作
  • 获取全部数据结束索引stop设置为-1
  • list可以对数据进行分页操作,通常第一页信息来自于缓存,之后页数再去查询数据库(第一页访问高频)

set

  • 数据存储需求:存储大量数据,在查询方面提供更高的效率
  • set类型:与hash存储结构相同,仅存储键,不存储值,并且值是不允许重复的(类比java中HashSet)

set基本操作

  • 添加数据

    sadd key member1 [member12]

  • 获取全部数据

    smember key

  • 删除数据

    srem key member1 [member2]

  • 获取集合数据总量

    scard key

  • 判断集合中是否包含某元素

    sismember key member

set扩展操作

  • 随机获取集合中指定数量的元素

    srandmember key [count]

  • 随机获取集合中的某个数据并将该数据移除集合

    spop key

应用场景:redis应用于随机推荐类信息检索,例如热点新闻、热点歌单等

  • 求两个集合的交集、并集、差集

    sinter key1 [key2]

    sunion key1 [key2]

    sdiff key1 [key2]

  • 求两个集合的交集、并集、差集并存储新集合

    sinterstore destination key1 [key2]

    sunionstroe destination key1 [key2]

    sdiffstroe destination key1 [key2]

    destination指新集合

  • 将指定数据从原集合移动到目标集合

    smove source destination member

set操作注意事项

  • set类型不允许数据重复
  • set虽然与hash结构相同,但无法启用hash中存储值得空间

sorted_set

  • 存储需求:数据排序有利于数据的有效展示,需要停工一种可以根据自身特征进行排序的方式
  • 存储结构:保存可排序的数据
  • sorted_set:在set的存储结构基础上添加可排序字段

sorted_set基本操作

  • 添加数据

    zadd key score1 member1 [score2 member2]

  • 获取全部数据

    zrange key start stop [withscores]

    zrevrange key start stop [withscores]

    [withscores] 查询元素

  • 删除数据

    zrem key member [member …]

  • 按条件获取数据

    zrangebyscore key min max [withscores] [limit]

    zrevrangebyscore key min max [withscores] [limit]

  • 条件删除数据

    zremrangebyrank key start stop

    zremrangebyscore key min max

  • 获取集合数据总量

    zcard key

    zcount key min max

  • 集合交、并操作

    zinterstore destination numkeys key [key …]

    zunionstore destination numkeys key [key …]

sorted_set扩展操作

  • 获取数据对应的索引

    zrank key member

    zrevrank key member

  • score值获取与修改

    zscore key member

    zincrby key increment member

sortes_set注意事项

  • score保存数据存储空间是64位,如果是整数范围为-9007199254740092~9007199254740092
  • score保存的数据也可以是双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时谨慎
  • sorted_set底层存储还是基于set结构的,因此数据不能重复,如果添加相同数据,score值将被反覆盖,保留最后一次的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值