1、使用redis有哪些好处?

  • 速度快:因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
  • 支持丰富数据类型:支持string,list,set,sorted set,hash
  • 支持事务:操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  • 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

2、redis相比memcached有哪些优势?

  • memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
  • redis的速度比memcached快很多
  • redis可以持久化其数据

3、redis常见性能问题和解决方案:

1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

3).Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。

4).Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内

4、mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。redis 提供 6种数据淘汰策略:

  • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数据

5、请用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次。

具体登录函数或功能用空函数即可,不用详细写出。

用列表实现:列表中每个元素代表登陆时间,只要最后的第5次登陆时间和现在时间差不超过1小时就禁止登陆。用Python写的代码如下:

6、redis的并发竞争问题如何解决?

Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是

由于客户端连接混乱造成。对此有2种解决方法:

  • 客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
  • 服务器角度,利用setnx实现锁。

注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。

7.redis持久化的几种方式

1、快照(snapshots)

缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump。rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。

工作原理

  • Redis forks。
  • 子进程开始将数据写到临时RDB文件中。
  • 当子进程完成写RDB文件,用新文件替换老文件。
  • 这种方式可以使Redis使用copy-on-write技术。

2、AOF

快照模式并不十分健壮,当系统停止,或者无意中Redis被kill掉,最后写入Redis的数据就会丢失。这对某些应用也许不是大问题,但对于要求高可靠性的应用来说,Redis就不是一个合适的选择。

Append-only文件模式是另一种选择。你可以在配置文件中打开AOF模式。

3、虚拟内存方式

当你的key很小而value很大时,使用VM的效果会比较好。因为这样节约的内存比较大。当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value。
vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的。可能会造成比较长时间的延迟,但是对数据完整性有很好的保证。

自己测试的时候发现用虚拟内存性能也不错。如果数据量很大,可以考虑分布式或者其他数据库

setnx是原子操作吗_Redis面试七连问,你能扛得住吗?相关推荐

  1. ElasticSearch 面试 4 连问,你顶得住么?

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 者:yanglbme github.com/doocs/ad ...

  2. 【JAVA】美团面试七连问

    问题1:解释一下对象的创建过程(半初始化). 申请一块内存,给它赋值默认值(8大类型都有自己的默认值,此时为半初始化状态),然后调用构造方法,赋初始值,然后建立关联 线程上锁 需要两遍检查,DCL= ...

  3. ThreadLocal 面试六连问,你能 Hold 住吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 转自:码农沉思录 中高级阶段开发者出去面试,应该躲不开Thread ...

  4. 十月百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题)

    十月百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题) 引言 当即早已进入10月份,十一过后,招聘,笔试,面试,求职渐趋火热.而在这一系列过程背后浮出的各大IT公司的笔试/面试题则蕴含着诸多 ...

  5. 十月百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题) .

    十月百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题) 引言 当即早已进入10月份,十一过后,招聘,笔试,面试,求职渐趋火热.而在这一系列过程背后浮出的各大IT公司的笔试/面试题则蕴含着诸多 ...

  6. **Java有哪些悲观锁的实现_面试4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?...

    推荐阅读: 数据库面试4连问:分库分表,中间件,优缺点,如何拆分? 终极手撕之架构大全:分布式+框架+微服务+性能优化,够不够? 消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗? 01 乐观锁 ...

  7. 前端怎么自我介绍_实习|猫眼前端面试经历,问问题很关键(已拿offer)

    作者:我是高手高手高高手 链接:https://www.nowcoder.com/discuss/198627 来源:牛客网 一面 面试官比较高冷,问了我很多问题有四五个没答上来.首先是自我介绍,没有 ...

  8. java面试题:Redis常见面试题(实际面试有被问到)

    目录 1.Redis和Memcached相比,有哪些优势? 2.Redis为什么要把数据放到内存中? 3.Redis 为何这么快? 4.为何使用单线程? 5.缓存三大问题以及解决方案? 缓存穿透:查询 ...

  9. 妹子面试阿里,面试官竟问她有没有男朋友?面试真题「PDF分享

    刚好要到八月十五前后,又是大家 面试的高峰期,本文是Java开发 小熙(妹子) 的面试分享.之前有分享过很多面试:拿到蚂蚁金服 offer, 我不去了.身为技术专家的我,面试居然还要靠刷题?,刷了一个 ...

最新文章

  1. ——————————————————————————————————1203————————————————————————————————...
  2. 使用SSM+JSP实现一个教务管理系统
  3. VS2013提示错误应输入表达式
  4. 从双层优化视角理解对抗网络GAN
  5. Javascript - demo 与 捷径
  6. Android跨进程通信——AIDL原理解析
  7. Windows事件ID详细
  8. R数据分析:竞争风险模型的做法和解释
  9. 计算机标准差平方差怎么按,数学标准差公式
  10. Coreldraw修改平面图独到漂亮见解就在这里了
  11. JBoss,Geronimo还是Tomcat?——三种开源Java应用服务器的比较
  12. “已成功与服务器建立连接,但是在登录过程中发生错误“的解决方法
  13. openCV之waitKey函数简介
  14. 高等代数----最小多项式的矩阵表示
  15. 如何用google translate API接口
  16. char *c和char c[]区别
  17. JS生成EXCEL(Chrome浏览器)
  18. 先验算法(Apriori Algorithm)原理及python代码实现
  19. 快速配置Let's encrypt通配符证书
  20. 处理2倍图片和3倍图片

热门文章

  1. azure夜校培训第6场 3月22日 18:00---MYSQL
  2. ucloud对象存储装宝塔_使用UCloud优刻得云主机和宝塔面板快速搭建WP个人博客网站教程...
  3. 最大化/最小化/关闭窗口代码集锦
  4. 荣耀X20 SE评测:6400万高清美拍 2000元以下真香现场
  5. 马斯克发全员信 呼吁员工6月底全力以赴
  6. Soul递交IPO招股书:腾讯为第一大股东,依然处于亏损状态
  7. 月薪23333元!淘宝招募“首席鉴雕官”,只需天天哈哈哈哈哈
  8. 水滴公司启动医务社工高级人才培养计划
  9. 三星Galaxy S21开启预购:最早1月14日发布 售价约5300元起
  10. iPhone 12的4G/5G信号又翻车了:不少用户吐槽无网络服务