什么是redis,redis简介
redis是⼀个key-value。包括string(字符串)、list()、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
⾼可⽤分布式集
⼀,⾼可⽤
⾼可⽤(High Availability),是当⼀台服务器停⽌服务后,对于业务及⽤户毫⽆影响。停⽌服务的原因可能由于⽹卡、路由器、机房、CPU负载过⾼、内存溢出、⾃然灾害等不可预期的原因导致,在很多时候也称单点问题。
(1)解决单点问题主要有2种⽅式:
主备⽅式
这种通常是⼀台主机、⼀台或多台备机,在正常情况下主机对外提供服务,并把数据同步到备机,当主机宕机后,备机⽴刻开始服务。
主从⽅式
这种采取⼀主多从的办法,主从之间进⾏数据同步。当Master宕机后,通过选举算法(Paxos、Raft)从slave中选举出新Master继续对外提供服务,主机恢复后以slave的⾝份重新加⼊。
主从另⼀个⽬的是进⾏读写分离,这是当单机读写压⼒过⾼的⼀种通⽤型解决⽅案。其主机的⾓⾊只提供写操作或少量的读,把多余读请求通过负载均衡算法分流到单个或多个slave服务器上。
⼆,分布式
分布式(distributed), 是当业务量、数据量增加时,可以通过任意增加减少服务器数量来解决问题。
集时代
⾄少部署两台Redis服务器构成⼀个⼩的集,主要有2个⽬的:
⾼可⽤性:在主机挂掉后,⾃动故障转移,使前端服务对⽤户⽆影响。
读写分离:将主机读压⼒分流到从机上。
可在客户端组件上实现负载均衡,根据不同服务器的运⾏情况,分担不同⽐例的读请求压⼒。
三,分布式集时代
当缓存数据量不断增加时,单机内存不够使⽤,需要把数据切分不同部分,分布到多台服务器上。
redis持久化的⼏种⽅式
1、快照(snapshots)
缺省情况情况下,Redis把数据快照存放在磁盘上的⼆进制⽂件中,⽂件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写⼊磁盘;或者你可以⼿⼯调⽤命令SAVE或BGSAVE。
⼯作原理
字符串是什么样 . Redis forks.
.⼦进程开始将数据写到临时RDB⽂件中。
.当⼦进程完成写RDB⽂件,⽤新⽂件替换⽼⽂件。
.这种⽅式可以使Redis使⽤copy-on-write技术。
2、AOF
快照模式并不⼗分健壮,当系统停⽌,或者⽆意中Redis被kill掉,最后写⼊Redis的数据就会丢失。这对某些应⽤也许不是⼤问题,但对于要求⾼可靠性的应⽤来说,
Redis就不是⼀个合适的选择。
Append-only⽂件模式是另⼀种选择。
你可以在配置⽂件中打开AOF模式
3、虚拟内存⽅式
当你的key很⼩⽽value很⼤时,使⽤VM的效果会⽐较好.因为这样节约的内存⽐较⼤.
当你的key不⼩时,可以考虑使⽤⼀些⾮常⽅法将很⼤的key变成很⼤的value,⽐如你可以考虑将key,value组合成⼀个新的value.
vm-max-threads这个参数,可以设置访问swap⽂件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap⽂件的操作都是串⾏的.可能会造成⽐较长时间的延迟,但是对数据完整性有很好的保证.
⾃⼰测试的时候发现⽤虚拟内存性能也不错。如果数据量很⼤,可以考虑分布式或者其他数据库
redis 最适合的场景
Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是⼀个disk-backed的功能,跟传统意义上的持久化有⽐较⼤的差别,那么可能⼤家就会有疑问,似乎Redis更像⼀个加强版的Memcached,那么何时使⽤Memcached,何时使⽤Redis呢?
如果简单地⽐较Redis与Memcached的区别,⼤多数都会得到以下观点:
1 、Redis不仅仅⽀持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2 、Redis⽀持数据的备份,即master-slave模式的数据备份。
3 、Redis⽀持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进⾏使⽤。
(1)、会话缓存(Session Cache)
最常⽤的⼀种使⽤Redis的情景是会话缓存(session cache)。⽤Redis缓存会话⽐其他存储(如Memcached)的优势在于:Redis提供持久化。当维护⼀个不是严格要求⼀致性的缓存时,如果⽤户的购物车信息全部丢失,⼤部分⼈都会不⾼兴的,现在,
他们还会这样吗?
幸运的是,随着 Redis 这些年的改进,很容易到怎么恰当的使⽤Redis来缓存会话的⽂档。甚⾄⼴为⼈知的商业平台Magento也提供Redis的插件。
(2)、全页缓存(FPC)
除基本的会话token之外,Redis还提供很简便的FPC平台。回到⼀致性问题,即使重启了Redis实例,因为有磁盘的持久化,⽤户也不会看到页⾯加载速度的下降,这是⼀个极⼤改进,类似PHP本地FPC。
再次以Magento为例,Magento提供⼀个插件来使⽤Redis作为全页缓存后端。
此外,对WordPress的⽤户来说,Pantheon有⼀个⾮常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页⾯。(3)、队列
Reids在内存存储引擎领域的⼀⼤优点是提供 list 和 set 操作,这使得Redis能作为⼀个很好的消息队列平台来使⽤。Redis作为队列使⽤的操作,就类似于本地程序语⾔(如Python)对 list 的 push/pop 操作。
如果你快速的在Google中搜索“Redis queues”,你马上就能到⼤量的开源项⽬,这些项⽬的⽬的就
是利⽤Redis创建⾮常好的后端⼯具,以满⾜各种队列需求。例如,Celery有⼀个后台就是使⽤Redis作为broker,你可以从这⾥去查看。
(4),排⾏榜/计数器
Redis在内存中对数字进⾏递增或递减的操作实现的⾮常好。集合(Set)和有序集合(Sorted Set)也使得我们在执⾏这些操作的时候变的⾮常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个⽤户–我们
称之为“user_scores”,我们只需要像下⾯⼀样执⾏即可:
当然,这是假定你是根据你⽤户的分数做递增的排序。如果你想返回⽤户及⽤户的分数,你需要这样执⾏:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games就是⼀个很好的例⼦,⽤Ruby实现的,它的排⾏榜就是使⽤Redis来存储数据的,你可以在这⾥看到。
(5)、发布/订阅
最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使⽤场景确实⾮常多。我已看见⼈们在社交⽹络连接中使⽤,还可作为基于发布/订阅的脚本触发器,甚⾄⽤Redis的发布/订阅功能来建⽴聊天系统!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论