redis数据结构底层原理——看这一篇就够了

浅识redis

我们说 Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。通过学习本篇博客的内容,初步了解redis的基本数据结构。本人学识有限,如有错误,及时指出,不胜感激~

注意:Redis的命令不区分大小写,但是key 严格区分大小写!!!

string

介绍 String相信大家都很熟悉,不管是Java,C,C++还是python,都有String类型的存在,String类型也就相当于Map<key,String>
用法
String用法1
String用法2
PS:
  ①、上面的 ttl 命令是返回 key 的剩余过期时间,单位为秒。
  ②、mset和mget这种批量处理命令,能够极大的提高操作效率。因为一次命令执行所需要的时间=1次网络传输时间+1次命令执行时间,n个命令耗时=n次网络传输时间+n次命令执行时间,而批量处理命令会将n次网络时间缩减为1次网络时间,也就是1次网络传输时间+n次命令处理时间。
  但是需要注意的是,Redis是单线程的,如果一次批量处理命令过多,会造成Redis阻塞或网络拥塞(传输数据量大)。
  ③、setnx可以用于实现分布式锁,具体实现方式后面会介绍。
  上面是 string 类型的基本命令,下面介绍几个自增自减操作,这在实际工作中还是特别有用的(分布式环境中统计系统的在线人数,利用Redis的高性能读写,在Redis中完成秒杀,而不是直接操作数据库。)。
  在这里插入图片描述
在这里插入图片描述
②、典型使用场景
  一、计数
  由于Redis单线程的特点,我们不用考虑并发造成计数不准的问题,通过 incrby 命令,我们可以正确的得到我们想要的结果。
  二、限制次数
  比如登录次数校验,错误超过三次5分钟内就不让登录了,每次登录设置key自增一次,并设置该key的过期时间为5分钟后,每次登录检查一下该key的值来进行限制登录。
常见用处一般做一些复杂的计数功能的缓存。之前做项目的时候,可以用作商品是否售罄的标志位。

hash

介绍
hash 是一个键值对集合,是一个 string 类型的 key和 value 的映射表,key 还是key,但是value是一个键值对(key-value)。类比于 Java里面的 Map<String,Map<String,Object>> 集合。
用法
①、相关命令介绍
在这里插入图片描述
  演示如下:
在这里插入图片描述
常见用处
  查询的时间复杂度是O(1),用于缓存一些信息。例如以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。(由于目前redis没有设置hsetex()这个方法 ,所以只能使用expire来设置)

list

介绍
list 列表,它是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际上是个链表。
  列表有两个特点:
  一、有序
  二、可以重复
  这两个特点要注意和后面介绍的集合和有序集合相对比。
用法

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值