redis 知识点大全

redis 知识点大全

Scroll Down

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复用模型

img

3. Redis 和memcached的选型

终极策略:使用redis的string类型做的事情,都可以用memcached替换,以此换取更好的性能提升;除此之外,优先考虑redis

4. 使用redis 有哪些好处

  1. 速度快 。因为数据存在内存中,类似于hashmap, hashMap的优势就是查找和操作的时间复杂度都是O(1)
  2. 支持丰富的数据类型 。支持string , hash , list, set, zset
  3. **支持事务 ** redis对事务是部分支持的,如果是在入队时报错,那么都不会执行;在非入队时报错,那么成功的就会成功执行。
  4. 丰富的特性。 可用于缓存,消息,按key设置过期时间,过期之后将会自动删除

5. redis有哪些数据淘汰策略

MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据

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

  1. Volatile-lru: 从已设置过期时间的数据集(service.db[i].expires)中挑选最近最少使用的数据淘汰
  2. Volatile-ttl: 从已设置过期时间的数据集(service.db[i].expires)中挑选将要过期的数据淘汰
  3. Volatile-random: 从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  4. Allkeys-lru: 从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  5. Allkeys-random: 从数据集(server.db[i].dict)中任意选择数据淘汰
  6. 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…

10. Redis常见性能问题和解决方案