1、什么是redis

Redis是一款基于C语言编写的key-value内存高速缓存数据库。

2、redis特点

Redis本质上是一个key-value类型的数据库,很像memcache,真个数据库统统加载到内存当中进行操作,定期通过异步操作把数据库数据 flush到硬盘上进行保存。
因为是纯内存操作,redis性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的key-value DB
redis的出色之处不仅仅是性能,redis的最大魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像memcache只能保存1MB的数据,因此redis可以用来实现很多有用的功能。
eg:用他的list来做FIFO双向表,实现一个轻量级的高性能消息队列服务,用他的set可以做高性能的tag系统等。
另外redis也可以对存入的key-value设置expire时间,因此也可以被当做一个功能加强版的memcache来用。
缺点
redis的主要缺点是数据库容量受物理内存的限制,不能用作海量数据的高性能读写,因此redis适用的场景主要局限在较小数据量的高性能操作和运算上。
优点
1、速度快,因为数据在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是0(1),2、支持丰富数据类型,支持 spring、list、set、 sorted set、hash,
3、支持事务,操作都是原子性,所谓的原子性就是对数据的操作和更改要么全部执行,要么全部不执行。
4、丰富的特性,可用于缓存消息,按key设置过期时间,过期后将会自动删除。

3:redis和memcache相比有哪些优势

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

4:memcache和redis的区别有哪些

1、存储方式不同
memcache把数据全部存储在内存之中,断电后会挂掉,数据不能超过内存大小;redis有部分存在硬盘上,这样能保证数据的持久性。
2、 数据支持类型不同
mamcache支持的数据类型相对单一,redis又复杂的数据类型;
3、使用底层模型不同
他们之间底层实现方式以及客户端之间通信的应用协议不一样。redis直接自己构建了vm机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

5:redis常见的性能问题和解决方案

1、Master写内存快照
save命令调度rdbsave函数会阻塞主线程工作,当快照比较大时对性能的影响是比较大的,会间断性暂停服务,所以Master最好不要写内存快照
2、Master AOF持久化
如果不重写AOF文件这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启后的回复速度,Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
3、Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占用大量的cpu和内存资源,导致服务加载过高,出现短暂服务暂停现象。
4、redis主从复制的性能问题
为了主从复制的速度和连接的稳定性Slave和Master最好在同一个局域网内。

6:mysql有2000万数据,redis只存20万数据,如何保证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(驱逐)
禁止驱逐数据

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

7:使用Redis和任意语言实现一段恶意登录保护的代码,限制一小时内每名用户id最多登录5次

用列表实现:
列表中每个元素代表登陆时间,只要最后的第五次登陆时间和现在时间差不超过一个小时就禁止登录
实例中用 Python代码写的,我也看不懂就不敲了。

8:为什么redis需要把所有数据放到内存中?

redis为了达到最快的读写速度,将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特性,如果不将数据放在内存中,磁盘I/O速度会严重影响redis的性能,在内存越来越便宜的今天,redis将会越来越受欢迎。
如果设置了最大使用的内存,则数据已有记录数达到限值 后不能继续插入新值。

9:redis是单线程单进程的

redis利用队列技术将并发访问变成串行访问,消除了传统数据库串行控制的开销