1.什么是Redis?简述其优缺点?Redis本质上是一个Key-Value类型的内存数据库,很像memcached,将整个数据库加载到内存中运行,定期通过异步操作将数据库数据刷入硬盘存储。由于是纯内存操作,Redis性能优异,每秒可处理超过100,000次读写操作,是目前已知最快的Key-ValueDB。Redis的优秀不仅仅在于性能。Redis最大的魅力在于它支持保存多种数据结构。另外单个值的最大限制是1GB,不像memcached只能保存1MB的数据,所以Redis可以用来实现很多有用的功能。功能。比如用他的List做一个FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的Set做一个高性能的标签系统等等。此外,Redis还可以为存储的Key-Value设置过期时间,因此也可以作为memcached的增强版使用。Redis的主要缺点是数据库容量受限于物理内存,无法用于海量数据的高性能读写。因此Redis适合的场景主要局限于小数据量的高性能运算和计算。2、Redis相对于memcached有什么优势?(1)memcached的所有值都是简单的字符串,而作为其替代者的redis支持更丰富的数据类型(2)Redis比memcached快很多(3)Redis可以持久化它的数据3、Redis支持哪些数据类型?String、List、Set、SortedSet、hashes4、Redis主要消耗哪些物理资源?记忆。5、Redis的全称是什么?远程词典服务器。6、Redis有哪几种数据淘汰策略?noeviction:当达到内存限制并且客户端尝试执行会使用更多内存的命令(主要是写命令,但DEL和一些例外)时返回错误allkeys-lru:尝试回收最少使用的键(LRU),所以新添加的数据有空间存储。volatile-lru:尝试回收最少使用的键(LRU),但仅回收过期集合中的键,以便新添加的数据有存储空间。allkeys-random:回收随机密钥,为新添加的数据腾出空间。volatile-random:回收随机键为新添加的数据腾出空间,但仅限于过期集合中的键。volatile-ttl:回收过期集合中的key,优先回收生存时间(TTL)较短的key,让新加入的数据有空间存储。7、为什么Redis官方不提供Windows版本?因为现在的Linux版本已经相当稳定,用户量也很大,所以没有必要去开发Windows版本,反而会造成兼容性问题。8.字符串类型的值最大可以存储多少容量?512M9。为什么Redis需要将所有数据存储在内存中?Redis为了达到最快的读写速度,将数据全部读入内存,异步写入磁盘。所以redis具有速度快,数据持久化的特点。如果数据不放在内存中,磁盘I/O速度会严重影响redis的性能。在内存越来越便宜的今天,redis会越来越流行。如果设置了最大内存使用量,现有数据记录数达到内存限制后无法插入新值。10、Redis集群方案中应该做些什么?有什么计划?1.鳕鱼。目前使用最多的集群方案,其效果与twemproxy基本相同,但支持当节点数量发生变化时,可以将旧节点数据恢复到新的hash节点上。2、rediscluster3.0自带的集群特点是其分布式算法不是一致性哈希,而是哈希槽的概念,支持节点设置从节点。有关详细信息,请参阅官方文档。3、在业务代码层实现,启动几个不相关的redis实例,在代码层,对key进行hash计算,然后去对应的redis实例操作数据。这种方式对哈希层代码要求比较高,考虑因素包括节点故障后的备选算法方案、数据震荡后脚本自动恢复、实例监控等。11、Redis集群方案在什么情况下会导致整个集群不可用?在一个有A、B、C三个节点的集群中,如果没有复制模型,如果B节点出现故障,整个集群会认为它缺少5501-11000范围内的slot,不可用。12、MySQL里面有2000万条数据,而redis里面只有2000万条数据。如何保证redis中的数据都是热数据?当redis内存数据集的大小上升到一定大小时,就会执行数据淘汰策略。13、Redis适用于哪些场景?(1)会话缓存(SessionCache)使用Redis最常用的场景就是会话缓存(sessioncache)。使用Redis缓存会话相对于其他存储(例如Memcached)的优势在于Redis提供了持久性。当维护一个不严格一致的缓存时,如果用户的所有购物车信息都丢失了,大多数人都会不高兴。现在,他们会吗?幸运的是,随着Redis多年来的改进,很容易找到有关如何正确使用Redis进行会话缓存的文档。甚至著名的商业平台Magento也为Redis提供了一个插件。(2)FullPageCache(FPC)除了基本的sessiontoken,Redis还提供了一个非常简单的FPC平台。回到一致性问题,即使Redis实例重启,用户也不会因为磁盘持久化而看到页面加载速度下降。这是一个很大的改进,类似于PHP的本地FPC。再次以Magento为例,Magento提供了一个插件来使用Redis作为全页缓存后端。另外,对于WordPress用户,Pantheon有一个非常不错的插件wp-redis,可以帮助你以最快的速度加载你访问过的页面。(3)QueueReids在内存存储引擎领域的优势之一是它提供了list和set操作,这使得Redis成为一个很好用的消息队列平台。Redis作为队列的操作类似于本地编程语言(如Python)对列表的push/pop操作。如果您在Google上快速搜索“Redis队列”,您会立即找到大量旨在使用Redis创建非常好的后端工具以满足各种队列需求的开源项目。比如Celery有后台使用Redis作为broker,可以从这里查看。(4)排行榜/计数器Redis可以很好地增加或减少内存中的数字。Sets和SortedSets也让我们执行这些操作变得非常简单。Redis只是提供了这两种数据结构。所以,我们想要从排序的集合中得到前10名的用户——我们称之为“user_scores”,我们只需要这样做:当然,这假设你是根据你的用户的分数进行增量排序。如果你想返回用户和用户的分数,你需要这样执行:ZRANGEuser_scores010WHITSCORESAAgoraGames是一个很好的例子,用Ruby实现,它的排行榜使用Redis存储数据,你可以在这里看到.(5)发布/订阅最后(但并非最不重要)是Redis的发布/订阅功能。发布/订阅确实有很多用例。我见过人们在社交网络连接中使用它,作为基于发布/订阅的脚本的触发器,甚至使用Redis的发布/订阅功能来构建聊天系统!14.Redis支持的Java客户端有哪些?官方推荐哪一款?Redisson、Jedis、lettuce等官方推荐使用Redisson。15、Redis和Redisson是什么关系?Redisson是一个先进的分布式协调Redis客户端,可以帮助用户轻松实现分布式环境下的一些Java对象(Bloomfilter,BitSet,Set,SetMultimap,ScoredSortedSet,SortedSet,Map,ConcurrentMap,List,ListMultimap,Queue,BlockingQueue,Deque,BlockingDeque、信号量、锁、ReadWriteLock、AtomicLong、CountDownLatch、发布/订阅、HyperLogLog)。16、Jedis和Redisson的优缺点是什么?Jedis是Redis用Java实现的客户端。其API为Redis命令提供了全面的支持。Redisson实现了分布式和可扩展的Java数据结构。与Jedis相比,其功能更简单,不支持字符串操作。不支持排序、事务、管道和分区等Redis功能。Redisson的目的是促进用户对Redis的关注点分离,让用户更专注于处理业务逻辑。17.Redis如何设置密码和验证密码?设置密码:configsetrequirepass123456授权密码:auth12345618说说Redishashslot的概念?Redis集群没有使用一致性哈希,而是引入了哈希槽的概念。Redis集群有16384个哈希槽。每个密钥通过CRC16校验后,它对16384取模以确定放置哪个插槽。集群的每个节点负责部分哈希槽。19、Redis集群的主从复制模型是什么?为了让集群在部分节点失效或大部分节点无法通信时仍然可用,集群采用了主从复制模型,每个节点都会有N-1个副本。20、Redis集群会丢失写操作吗??为什么?Redis不保证数据的强一致性,这意味着在实践中,集群在某些情况下可能会丢失写操作。21、Redis集群是如何复制的?异步复制22.Redis集群的最大节点数是多少?16384.23.Redis集群如何选择数据库?Redis集群目前无法选择数据库,默认为0数据库。24.如何测试Redis的连通性?ping25和Redis中的管道有什么用?即使旧请求未得到响应,请求/响应服务器也可以执行新请求。这使得可以向服务器发送多个命令而无需等待回复,并最终一步读取该回复。这就是流水线,一种已经被广泛使用了几十年的技术。例如,很多POP3协议都实现了对这个功能的支持,大大加快了从服务器下载新邮件的过程。26.如何理解Redis事务?事务是一个独立的操作:事务中的所有命令都被序列化并按顺序执行。交易执行过程中,不会被其他客户端发送的命令请求打断。一个事务是一个原子操作:要么执行事务中的所有命令,要么不执行任何命令。27、Redis事务相关的命令有哪些?如何分别设置MULTI、EXEC、DISCARD、WATCH28、Rediskey的过期时间和永久有效?EXPIRE和PERSIST命令。29、Redis是如何优化内存的?尽可能使用哈希表(hashes)。哈希表(意思是存储在哈希表中的数字很小)占用的内存非常少,所以你应该尽可能地将你的数据模型抽象成一个哈希表。例如,如果你的web系统中有一个用户对象,不要为用户的名字、姓氏、电子邮件和密码设置单独的键,而是将用户的所有信息存储在一个哈希表中。30.Redis回收过程是如何进行的?客户端运行新命令并添加新数据。Redi检查内存使用情况,如果大于maxmemory的限制,就会按照设定的策略进行回收。执行新命令等。所以我们不断地越过内存限制的边界,不断地到达边界,然后不断地回收到边界以下。如果一个命令的结果导致大量内存被使用(比如将非常大的集合的交集保存到一个新的键),用不了多久就会被这个内存使用量超过内存限制。
