1. 什么是redis
Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
2. redis 和 memcached区别和比较
- memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类型。Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- redis 支持数据的备份,即master-slave模式的数据备份
- redis 可以持久化数据。可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用,而memcached把数据全部存储在内存中。
- Redis 的速度比mamcached快很多
- memcached是多线程,非阻塞IO复用的网络模型;redis使用单线程的IO复用模型
3. Redis 和memcached的选型
终极策略:使用redis的string类型做的事情,都可以用memcached替换,以此换取更好的性能提升;除此之外,优先考虑redis
4. 使用redis 有哪些好处
- 速度快 。因为数据存在内存中,类似于hashmap, hashMap的优势就是查找和操作的时间复杂度都是O(1)
- 支持丰富的数据类型 。支持string , hash , list, set, zset
- **支持事务 ** redis对事务是部分支持的,如果是在入队时报错,那么都不会执行;在非入队时报错,那么成功的就会成功执行。
- 丰富的特性。 可用于缓存,消息,按key设置过期时间,过期之后将会自动删除
5. redis有哪些数据淘汰策略
MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
相关知识点:redis的内存数据上升到一定大小的时候,机会施行数据淘汰策略(回收策略),redis提供6中淘汰策略。
- Volatile-lru: 从已设置过期时间的数据集(service.db[i].expires)中挑选最近最少使用的数据淘汰
- Volatile-ttl: 从已设置过期时间的数据集(service.db[i].expires)中挑选将要过期的数据淘汰
- Volatile-random: 从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- Allkeys-lru: 从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- Allkeys-random: 从数据集(server.db[i].dict)中任意选择数据淘汰
- no-eviction(驱逐):禁止驱逐数据
6. Redis 的并发竞争问题如何解决
Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:
1.客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。 2.服务器角度,利用setnx实现锁。
注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。
7. Redis回收进程如何工作的? Redis回收使用的是什么算法?
Redis内存回收:LRU算法(写的很不错,推荐):www.cnblogs.com/WJ5888/p/43…
8. Redis 大量数据插入
官方文档给的解释:www.redis.cn/topics/mass…
9. Redis 分区的优势、不足以及分区类型
官方文档提供的讲解:www.redis.net.cn/tutorial/35…