redis数据类型

redis的存储结构是key-value类型,有5种存储类型

a. key-string
b. key-hash
c. key-list
d. key-set
e. key-sortedset
所有的类型都可以用expire设置过期时间,其中string类型和sortedset类型不仅可以用expire命令,还可以加参数设置过期时间

key-string

字符串类型,最常用最简单的类型,可以用 help @string查出所有相关的命令,也可以去redis官网查看具体的说明:https://redis.io/commands/?group=string
在这里插入图片描述

  1. redis用的是安全二进制传输,string类型底层也是存的二进制,所以string类型有很多二进制命令,而且没有长度限制,故可以直接用原生的redis命令实现很多需要大bit的场景:如查询电话号码是否注册,统计登录/签到等
  2. string的set命令能带nx,xx,ex,px参数,基于这个命令可实现redis分布式锁。
    nx:当key不存在时可以写入,只能新建,与xx互斥
    xx:当key存在时可以写入,只能更新,与nx互斥
    ex:设置过期时间 单位s,与px互斥
    px: 设置过期时间 单位ms,与ex互斥

在这里插入图片描述

key-list

简单的字符串列表,按照插入顺序排序。你可以添加/弹出一个元素到列表的头部(左边)或者尾部(右边)。可以用 help @list查出所有相关的命令,也可以去redis官网查看具体的说明:https://redis.io/commands/?group=list
在这里插入图片描述

  1. 既可以是队列,也可以是栈。队列的实用场景不多,因为更好实现队列功能的有MQ,用redis实现队列的比较少,但是游戏的全服/跨服匹配系统是可以用redis队列实现的。

key-hash

是一个 string 类型的 field(字段) 和 value(值) 的映射表,可以用 help @hash查出所有相关的命令,也可以去redis官网查看具体的说明:https://redis.io/commands/?group=hash
在这里插入图片描述

  1. hash类型可以有效的把一个对象的信息存储起来,比如张三[姓名:张三,年龄:男,职业:法外狂徒],如果用string类型存储,则对象的信息就分散开了,而用hash存的话就可以有效的聚合起来。典型的hash类型的实用场景是session:key是sessionId,field是attributeKey,value是attributeValue。当然如果要缓存mysql的数据,hash类型也是不二之选
  2. 选择hash类型,而不选择string,除了可以聚合数据之外,还可以减少key的数量,因为key上除了存储key的名字外,还需要存储过期时间等信息,这加大了存储空间

key-set

Set 是 String 类型的无序集合。集合成员是唯一
可以用 help @set查出所有相关的命令,也可以去redis官网查看具体的说明:https://redis.io/commands/?group=set
在这里插入图片描述
1、因为set是无序集合且全员唯一,所以用来做抽奖系统非常合适,其原生命令SPOP可直接实现

key-sortedset

sortedset是 String 类型的有序集合。集合成员是唯一
可以用 help @sorted_set查出所有相关的命令,也可以去redis官网查看具体的说明:https://redis.io/commands/?group=sorted-set
在这里插入图片描述

  1. sorted sets里面当items内容大于64的时候同时使用了hash和skiplist两种设计实现。这也会为了排序和查找性能做的优化
    添加和删除都需要修改skiplist,所以复杂度为O(log(n))。
    但是如果仅仅是查找元素的话可以直接使用hash,其复杂度为O(1)
    其他的range操作复杂度一般为O(log(n))
    如果是小于64的时候,因为是采用了ziplist的设计,其时间复杂度为O(n)
  2. sorted sets的实际典型场景有:排行榜,统计
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值