【面试真经】-redis系列

文章目录

    • 1. 你们为什么使用redis?
    • 2. redis有哪些数据类型
    • 3. redis是怎么做持久化的?
    • 4. redis集群你们怎么做的?
    • 5. redis有哪些应用场景
    • 6. 一个字符串类型的值能存储的最大容量是多少?
        • 推荐redis相关书籍:
        • 推荐redis学习网站:

1. 你们为什么使用redis?

答: 面试官好,我们的数据库主要用的是MySQL,目前的业务发展设计到高并发场景下的库存扣减,网站首页访问流量高峰等等,数据库已经支撑不住如此高的并发,于是我们引入了缓存中间件,市面上的中间件redis和memcached我们有在用。我在使用过程中对reids和memcached做了下对比:
1) redis相比memcached来说用拥有更多的数据结构和支持更丰富的数据操作。 所以像我们公司设计复杂的结构和操作,我们选择了redis
2) 在内存使用效率上做了下对比,单纯使用key-value 存储的话,memcached的内存利用率更高,但redis采用hash结构来做key-value 存储,由于其组合式的压缩,让内存的利用率高于了memcached
3) 在性能上, redis只使用单核,而memcached 可以使用多核,所以平均每一个核上的redis在存储小数据时比memcached性能要高。
在使用过程中,有时候也设计到100K以上的数据,这个时候,redis的性能就稍逊于memcached
3) 在数据持久化支持上,redis提供了两种持久化策略,分别是RDB快照和AOF日志,而memcached 不支持数据持久化操作。
所以综合下来我们选择了redis。

2. redis有哪些数据类型

答: 关于redis的数据类型,我知道的有这么几个: 字符串string,字典hash,列表list,集合set , 有序集合 SortedSet,因为公司涉及到高并发,所以还接触过Bloom Filter,以及支持全文搜索的RediSearch等。

3. redis是怎么做持久化的?

答: 持久化有两种方式RDB和AOF,RDB做镜像全量持久化,AOF做增量持久化。 我们公司一般RDB和AOF会配合起来使用。 在redis实例重启的时候,会使用RDB持久化文件重构内存,在使用AOF重放近期的操作指令来恢复重启前的状态。
当然reids的机制是AOF开启且存在AOF文件时候,优先加载AOF文件。 AOF关闭或者AOF文件不存在的时候,加载RDB文件。
大流量的时候不要开AOF,开RDB即可
如果服务器突然断电,可以使用AOF恢复,AOF日志有sync属性配置,在高性能场景下使用定时sync,比如1s1次,这样即使断电最多丢失1s的数据。

4. redis集群你们怎么做的?

答: redis集群我接触过的有这么几种,
1) 主从模式,一主多从。虽然redis单机的qps可以达到10W+,但是在某些高访问场景下依然不够用,一般通过读写分离来增加slave,减少主机压力。
这种方式需要用户自行开发主从切换功能,也就是使用哨兵去探测每个实例的健康状况,然后通过指令进行集群状态的改变。 当集群规模变大可以加入类似zk的主动通知功能,降低风险。一般可以维护几千个redis节点。
2) 代理模式,比如codis,代理层通过把自己模拟成一个redis,接受来自客户端的请求,然后按照自定义的路由逻辑进行数据分片和迁移。
加入了proxy层,对性能有一定的损耗,多个proxy使用lvs进行负载均衡
3) redis cluster是社区提供的亲生集群方案,官方当前推荐的方案, 主要特点是去中心化,不需要proxy代理。主要的用途是实现数据分片(Data Sharding),同样可以实现HA。
redis cluster 采用了hash槽的概念,集群会预先分配16384个槽,并将这些槽分配给具体的服务节点,通过Key进行CRC16(KEY)%16384 运算得到对应的槽是哪一个,从而将读写操作转发到该槽对应的服务节点。当有新的节点加入或者一处的时候,再来迁移这些槽以及对应的数据。 更方便的动态扩容和缩容。

5. redis有哪些应用场景

1) 存储json类型的对象
2)排行榜, 计数器
3) 优酷视频的点赞
4)朋友圈点赞
5)会话缓存

6. 一个字符串类型的值能存储的最大容量是多少?

512M(官网数据)

推荐redis相关书籍:

《redis设计与实现》
《redis实战》

推荐redis学习网站:

1)redis中文命令解释
2) redis 命令练习网站

你可能感兴趣的:(面试真经,redis,面试,redis学习)