Redis面试题(六)

  1. Redis如何做大量数据插入?
    答:从Redis2.6开始,redis-cli支持一种新的被称之为pipe mode的新模式,来用于执行大量数据插入的工作。

  2. 说说Redis的Pipeline是什么?
    答:Pipeline就是管道的意思。而管道本身是能够承载流式数据的一个长链路,能够对做到对事件的缓冲效果。

  3. 为什么需要Redis的Pipeline?
    答:首先要了解Redis的工作过程是基于请求/响应模式的,所以客户端发出一个请求发出后,要等到这个请求被服务端响应回来才能继续发出下一个请求,这样要是有大批的请求需要处理,不仅要来回好多次,而且这好几次都是I/O请求,所以Pipeline应运而生了,它允许客户端一次性发送多条命令,不需要等待上一条命令的处理结果,最后所有命令一起处理完返回就好了。

  4. 说说Redis的Pipeline的实现思路?
    答:首先客户端会将多条命令先放入缓冲区,最后再一次性发给Redis,然后Redis执行完这些命令后,再把结果统一返回。

  5. 使用Redis的Pipeline有没什么注意点?
    答:不要一次性把大量的命令都放到一个Pipeline中,要知道缓冲区也是有大小限制的,而且命令涉及的数据量太多的话,网络传输延迟就会增加,大量的Redis内存也会被消耗,可以把大量的命令拆分给多个
    Pipeline,分别执行。

  6. Twemproxy是什么?
    答:Twemproxy是Twitter维护的(缓存)代理系统,代理Memcached的ASCII协议和Redis协议。它是单线程程序,使用c语言编写,运行起来非常快。它是采用Apache 2.0 license的开源软件。 Twemproxy支持自动分区,如果其代理的其中一个Redis节点不可用时,会自动将该节点排除(这将改变原来的keys-instances的映射关系,所以你应该仅在把Redis当缓存时使用Twemproxy)。 Twemproxy本身不存在单点问题,因为你可以启动多个Twemproxy实例,然后让你的客户端去连接任意一个Twemproxy实例。 Twemproxy是Redis客户端和服务器端的一个中间层,由它来处理分区功能应该不算复杂,并且应该算比较可靠的。

  7. Redis与其他key-value存储有什么不同?
    答:Redis提供的数据类型更丰富,而且还提供了原子操作。Redis是基于内存的,但是一样可以持久化到磁盘。

  8. Redis如何做内存优化?
    答:尽量使用hash,因为hash使用的内存很少。所以如果要存入一些键值,尽量把他们抽象成对象,而不是把一个一个的字段设成key值分别保存,总而言之,存储数据时,在可以的情况下,尽量带入抽象的思维。

  9. 都有哪些办法可以降低Redis内存的使用情况呢?
    答: 如果使用的Redis实例是32位的,那么可以好好利用 Hash,list, set,zset等集合类型数据,因为通常情况下很多小的Key-Value键值对可以用更紧凑的方式存放到一起的。

  10. 如果有大量的key需要设置同一时间过期,一般需要注意什么?
    答:如果大量的key过期时间设置的过于集中的话,一旦到了过期的那个时间点,redis可能会出现短暂的卡顿现象。所以可以在时间上加一个随机值,让过期时间变得分散一 些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章