Redis是什么?,服务器上部署redis的服务
1.Redis是什么?
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的内存缓存数据库。Redis的全称是:RemoteDictionaryServer(远程数据服务)。这个软件是用C语言编写的。Redis是一个键值存储系统,支持丰富的数据类型,如字符串、列表、集合、zset(排序集)和hash。
2.Redis功能
Redis使用内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节的字符串为例,其读取速度可达110000次/秒,写入速度可达81000次/秒。
与memcache不同,Redis对存储在Redis中的数据具有持久性,断电或重启后数据不会丢失。因为Redis的存储分为内存存储、磁盘存储和日志文件三部分,重启后Redis可以将数据从磁盘重新加载到内存中,这可以通过配置文件进行配置。正因为如此,Redis才能坚持下来。
Redis支持主从模式,集群可以配置,更有利于支持大型项目,这也是Redis的一大亮点。
3.Redis应用场景,它能做什么?
许多语言支持Redis。因为Redis可以快速交换数据,所以经常用在服务器中,用来存储一些需要经常检索的数据。这样可以大大节省系统直接读取磁盘获取数据的I/O开销,更重要的是可以大大提高速度。
以大型网站为例。比如网站A的首页,每天有100万人访问,有一个板块是推荐新闻。如果直接从数据库查询,一天要消耗100万次数据库请求。如上所述,Redis支持丰富的数据类型,因此这可以由Redis来完成。当你想使用这个热数据的时候,可以直接从内存中取数据,大大提高了速度,节省了服务器的开销。
1.使用Redis有什么好处?
(1)速度快,因为数据存在于内存中,类似于HashMap,其优点是搜索和运算的时间复杂度为O(1)。
(2)支持丰富的数据类型,字符串、列表、集合、排序集、哈希
(3)支持事务,所有操作都是原子的。所谓原子性是指对数据的所有更改都将被执行,或者都不执行。(4)功能丰富:可用于缓存和消息,过期时间可按键设置,过期自动删除。
2.Redis比memcached有什么优势?
(memcached的所有值都是简单的字符串,redis作为其替代品,支持更丰富的数据类型。
(2) redis比memcached快很多。
(3) redis可以持久化其数据。
3.Redis常见性能问题及解决方案:
(1) Master最好不要做任何持久的工作,比如RDB内存快照和AOF日志文件。
(2)如果数据重要,从机打开AOF备份数据,策略设置为每秒同步。
(3)为了主从复制的速度和连接的稳定性,主从最好在同一个局域网内。
(4)尽量避免给压力大的主库添加从库。
(5)主从复制不要用图结构,要用单向链表结构,这样更稳定,即:主从1-从2-从3。
这种结构便于解决单点故障问题,实现主从替代。如果Master挂机,可以立即使Slave1成为Master,其余保持不变。
4.MySQL有2000w数据,redis只有20w数据。如何保证redis中的数据都是热点数据?
知识:当redis内存数据集的大小上升到一定大小时,就会执行数据消除策略。Redis提供了六种数据消除策略:
Voltile-lru:从设置了过期时间的数据集中选择最近最少使用的数据(server.db[i])。过期)并将其报废。
Volatile-ttl:从带有过期时间的数据集中选择要过期的数据(server.db[i])。过期)并将其报废。
Volatile-random:从设置了到期时间的数据集中任意选择数据报废(server.db[i])。过期)
Allkeys-lru:从数据集中选择最近最少使用的数据(server.db[i])。dict)并将其退役。
Allkeys-random:从数据集(server.db[i])中选择任意数据。dict)被淘汰。
禁止:禁止驱逐数据。
5.Memcache和Redis有什么区别?
1)、存储模式
Memecache将所有数据存储在内存中,断电后会挂机。数据不能超过内存大小。
Redis的一部分存储在硬盘上,可以保证数据的持久性。
2)数据支持的类型
Memcache对数据类型的支持相对简单。
Redis有复杂的数据类型。
3)使用不同的基础模型
它们与客户端通信的底层实现和应用协议是不同的。
Redis直接自建VM机制,因为一般系统调用系统函数的话,会浪费一定的时间去移动和请求。
4)、价值大小
Redis最大可达1GB,而memcache只有1MB。
6.Redis有哪些常见的性能问题?怎么解决?
1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作。快照大的时候会对性能有很大影响,会间歇性暂停服务,所以Master最好不要写内存快照。
2).AOF大师坚持不懈。如果不重写AOF文件,这种持久化方法对性能的影响最小,但是AOF文件会继续增长。太大的AOF文件会影响主重启的恢复速度。Master最好不要做任何持久化的工作,包括内存快照和AOF日志文件,尤其是不要为了持久化而启用内存快照。如果数据是关键的,从站启动AOF来备份数据,策略是每秒同步一次。
3).Master调用BGREWRITEAOF重写AOF文件。重写时,AOF会占用大量CPU和内存资源,导致服务负载高,服务暂停时间短。
Redis主从复制的性能问题。为了主从复制的速度和连接的稳定性,主从最好在同一个局域网内。
7.最适合Redis的场景
Redis是最适合所有数据存储的场景。Redis虽然也提供持久化,但实际上更多的是一种磁盘备份的功能,与传统意义上的持久化有很大的不同。所以可能大家都会有疑问。看起来Redis更像是Memcached的加强版,那么什么时候用Memcached,什么时候用Redis呢?
如果我们简单比较一下Redis和Memcached的区别,大部分都会得到以下看法:
1.Redis不仅支持简单的k/v数据,还提供了list、set、zset、hash等数据结构的存储。
2.Redis支持数据备份,即主从模式的数据备份。
3.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时可以再次加载使用。
(1)会话缓存
使用Redis最常用的场景是会话缓存。使用Redis缓存会话相对于其他存储(如Memcached)的优势在于Redis提供了持久性。在维护一个不严格一致的缓存时,如果用户的购物车信息全部丢失,大多数人都会不高兴。现在,他们还会这样吗?
幸运的是,随着这些年来Redis的改进,很容易发现如何正确使用Redis来缓存会话的文档。甚至知名商业平台Magento也为Redis提供插件。
(2)整页缓存(FPC)
除了基本的会话令牌,Redis还提供了一个非常简单的FPC平台。回到一致性问题,即使Redis实例重启,用户也不会因为磁盘持久化而看到页面加载速度的下降,这是很大的进步,类似于PHP原生FPC。
再次以Magento为例。Magento提供了一个插件来使用Redis作为整页缓存后端。
除此之外,对于WordPress用户来说,Pantheon有一个非常好的插件wp-redis,可以帮助你以最快的速度加载你浏览过的页面。
(3)排队
Reids在内存存储引擎领域的优势之一是提供了列表和集合操作,这使得Redis成为一个很好的消息队列平台。Redis作为队列的操作类似于本地编程语言(比如Python)对list的push/pop操作。
如果你在Google中快速搜索“Redis queues”,你会立刻发现大量的开源项目。这些项目的目的是使用Redis创建非常好的后端工具,以满足各种队列需求。比如芹菜就有使用Redis做经纪人的背景。你可以在这里查看。
(4)、排行榜/计数器
Redis可以很好地增加或减少内存中的数字。集合和有序集合也使我们执行这些操作变得非常简单。Redis正好提供了这两种数据结构。因此,我们希望从排序后的集合中获得前10名用户,我们称之为“user_scores ”,我们只需如下执行它:
当然,这是假设你根据用户的分数进行递增排序。如果您想返回用户及其分数,您需要这样做:
ZRANGE user_scores 0 10带分数
Agora Games就是一个很好的例子,是用Ruby实现的。它的排行榜使用Redis存储数据,你可以在这里看到。
(5)发布/订阅
最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实很多。我见过有人在社交网络连接中使用它,它也可以作为基于发布/订阅的脚本触发器,甚至使用Redis的发布/订阅功能来构建聊天系统!不,是真的,你可以去查。
在Redis提供的所有功能中,我感觉这个是我最不喜欢的一个,虽然它为用户提供了多种功能。