redis面试题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了redis面试题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3300字,纯文字阅读大概需要5分钟。
内容图文
![redis面试题](/upload/InfoBanner/zyjiaocheng/870/0d3f664353b541508f9841066a4e1489.jpg)
Redis简介和优缺点
redis本质上是一个Key- Value 类型的内存数据库,是纯内存操作。定期 通过异步操作把数据库数据flush 到硬盘上进行保存。
优点: - 性能出色 - 支持保存多种数据结构,且单个value最大限制是1GB - 可以设置一个时效时间
应用:List做FIFO双向链表就可以实现一个轻量级的高性能消息队列服务。而用Set就可以做一个高性能的tag系统
缺点:数据库容量收到物理内存限制,不好做海量数据的高性能读写。
Redis 与memcached 相比有哪些优势?
1 .memcached 所有的值均是简单的字符串, redis 作为其替代者, 支持更为丰富的数据类型 2.redis 的速度比memcached 快很多 3.redis可以持久化数据
redis数据类型
String 、List 、Set、Zset 、hash
Redis 主要消耗什么物理资源?
内存
数据淘汰策略
作为一个内存数据库,redis在内存空间不足的时候,为了保证命中率,就会选择一定的数据淘汰策略
- volatile-lru(推荐使用):从设置了过期时间的数据集中,选择最近最久未使用的数据释放;
- allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放;
- volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放;
- allkeys-random:从数据集中(包括了设置过期时间以及未设置过期时间)随机选择一个数据进行入释放;
- volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作;
- noeviction(默认):不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。
一个字符串类型的值能存储最大容量是多少?
512M
MySQL里有2000w 数据,redis中只存20w的数据,如何保证redis 中的数据都是热点数据?
限定redis占用的内存,redis会根据自身数据淘汰策略,留下热数据到内存。所以可以计算100w数据大约占用的内存,
然后设置一下redis内存限制即可,并将淘汰策略设置为allkeys-lru或者volatile-lru.
设置redis最大占用内存:
打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型哦!
maxmemory 268435456
设置过期策略:
maxmemory-policy volatile-lru
过期策略
redis会把设置了过期时间的key放入一个独立的字典里,在key过期时并不会立刻删除它。而是通过两种策略:
- 惰性删除:客户端访问某个key,redis检查key是否过期,过期了就删掉
-
定期扫描:redis默认每秒执行10次过期扫描,扫描策略如下:
- 从过期字典中随机选择20个key
- 删除20个key中已过期的key
- 如果过期的key比例超过25%就会重复第一步
LRU算法
维护一个链表,用于顺序存放被访问过的key,在访问数据是,最新访问过的key将被移动到表头,这样最近访问的key在表头,最少访问的key在表尾
为什么Redis 需要把所有数据放到内存中?
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写 入磁盘。所以redis 具有快速和数据待久化的特征,如果不将数据放在内存中, 磁盘I/O速度为严重影响redis的性能。
Redis 如何做内存优化?
尽可能使用散列表(hashes) , 散列表(是说散列表里面存储的数少) 使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。 比如你的web系统中有一个用户对象,不要为这个用户的名称, 姓氏, 邮箱, 密码设罢单独的key, 而是应该把这个用户的所有信息存储到一张散列表里面。
Redis 集群会有写操作丢失吗?为什么?
Redis 并不能保证数据的强一致性, 这意味这在实际中集群在特定的条件下可能会丢失写操作。
Redis 集群的主从复制模型是怎样的?
为了使在部分节点在失败或者大部分节点无法通信的情况下集群仍然可用, 所以集群使用了主从复制模型, 每个节点都会有N - 1 个复制品.
Redis 中的管道有什么用?
一次清求/响应服务器能实现处理新的清求即使旧的清求还未被响应, 这样就可以将多个命令发送到服务器, 而不用等待回复, 最后在一个步骤中读取该答复。这就是管道( pi pelinin g ) , 比如我在论坛系统项目中邮件发送了解到的POP3 协议已经实现支待这个功能,可以大大加快了从服务器下载新邮件的过程。
内容总结
以上是互联网集市为您收集整理的redis面试题全部内容,希望文章能够帮你解决redis面试题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。