key设计 短信验证存redis_自问自答学习redis(一)

【1】什么是redis,谈谈你对redis的理解

redis 就是一个数据库,不过与传统数据库不同的是, redis 的数据是存储在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。redis 提供了五种数据类型来支持不同的业务场景。

【2】redis常见数据结构以及使用场景分析

1. String,常规计数场景:微博数,粉丝数,页面访问次数等,涉及命令:incr、decr、incrby、decrby。

2. List,列表场景:微博的关注列表,粉丝列表,消息列表,涉及指令:lrange(进行分页查询)

3. Hash,存储对象信息:用户信息,商品信息。

4. Set,求交集场景:共同关注、共同粉丝、共同喜好,涉及指令:sinterstore。

5. ZSet,排行榜场景:网易云音乐歌曲排行榜、在线用户列表,直播弹幕消息。

【3】redis设置过期时间了解吗

redis中有个设置时间过期的功能,即对存储在 redis 数据库中的key可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的token或者一些登录信息以及短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。使用redis的expire指令可以很好的完成这个需求。

【4】redis是怎么对过期的key进行删除的?

定期删除+惰性删除。

定期删除:redis默认是每隔 100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。注意这里是随机抽取的。为什么要随机呢?你想一想假如 redis 存了几十万个 key ,每隔100ms就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很大的负载!

惰性删除 :定期删除可能会导致很多过期 key 到了时间并没有被删除掉。所以就有了惰性删除。假如你的过期 key,靠定期删除没有被删除掉,还停留在内存里,除非你的系统去查一下那个 key,才会被redis给删除掉。这就是所谓的惰性删除,也是够懒的哈!

【5】redis 持久化机制

RDB、AOF。

RDB方式:创建数据库快照来持久化redis服务器的数据,将数据保存到rdb文件中。

AOF方式:开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件,从而实现redis的持久化,并且还会定时的重写AOF文件,以免文件过大。

【6】AOF 重写

AOF重写机制并不是对原AOF文件进行重写,而是创建一个临时的AOF文件,然后根据redis的键值对来实现数据持久化,最后再覆盖原AOF文件。重写后的AOF文件和原AOF文件存储的数据一样,但是大小会更轻。

【7】redis和Memcached的区别

1. redis比Memcached提供了更多样化的数据结构

2. redis支持持久化,而Memcached不支持持久化。

3. redis支持数据备份,如master-slave模式的数据备份,而Memcached不支持。

【8】redis是单线程还是多线程?为什么那么快?

redis是单线程的,因为redis存储的数据都是在内存的,所以访问速度会比关系型数据库快。

【9】redis的五种数据类型

String、List、Hash、Set、ZSet(SortedSet)

5af1169e5ef696e62afe49d32a8b31e7.png

【10】zSet的底层实现

zSet的底层有两种:ziplist和skiplist。

使用ziplist的两个条件:

1. 元素个数小于128。

2. 所有value的长度小于64字节。

否则使用skiplist来实现zset。

PS:

ziplist介绍:

ziplist编码的有序集合使用紧挨在一起的压缩列表节点来保存,第一个节点保存member,第二个保存score。ziplist内的集合元素按score从小到大排序,score较小的排在表头位置。

skiplist介绍

跳表(skip List)是一种随机化的数据结构,基于并联的链表,实现简单,插入、删除、查找的复杂度均为O(logN)。简单说来跳表也是链表的一种,只不过它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查找元素时,跳表能够提供O(logN)的时间复杂度。

【11】skiplist的搜索和插入过程

搜索:首先在最高层单链表开始找,如果找不到就往下一层单链表找,直到找到为止。

插入:插入之前需要先经历搜索过程,找到了插入的位置之后,随机在一层中分配这个新节点。

2d3c1ccdd17abe5c54111d070cdeb080.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值