redis主要解决什么问题
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,你可以从这里去查看。
排行榜/计数器Redis在内存中对数字进行递增或递减的操作实现的非常好。
集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。
所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:当然,这是假定你是根据你用户的分数做递增的排序。
如果你想返回用户及用户的分数,你需要这样执行:ZRANGE user_scores 0 10 WITHSCORESAgora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。
5、发布/订阅最后(但肯定不是最不重要的)是Redis的发布/订阅功能。
发布/订阅的使用场景确实非常多。
我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。
Redis提供的所有特性中,我感觉这个是喜欢的人最少的一个,虽然它为用户提供如果此多功能。
等等?
redis和memcache等缓存技术的应用场景,redis及memecache的优缺...
redis是一个key-value存储系统。
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步展开全部Replication(树形) data types(String、Lists、Sorted Sets、Hashes) persistence (snapshot、aof) 很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。
但是测试结果基本是Redis占绝对优势。
一直在思考这个原因,目前想到的原因有这几方面。
Libevent。
和Memcached不同,Redis并没有选择libevent。
Libevent为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。
Redis用libevent中两个文件修改实现了自己的epoll event loop(4)。
业界不少开发者也建议Redis...
Redis和Memcache的区别总结
展开全部 1. Redis是什么这个问题的结果影响了我们怎么用Redis。
如果你认为Redis是一个key value store, 那可能会用它来代替MySQL;如果认为它是一个可以持久化的cache, 可能只是它保存一些频繁访问的临时数据。
Redis是REmote DIctionary Server的缩写,在Redis在官方网站的的副标题是A persistent key-value database with built-in net interface written in ANSI-C for Posix systems,这个定义偏向key value store。
还有一些看法则认为Redis是一个memory database,因为它的高性能都是基于内存操作的基础。
另外一些人则认为Redis是一个data structure server,因为Redis支持复杂的数据特性,比如List, Set等。
对Redis的作用的不同解读决定了你对Redis的使用方式。
互联网数据目前基本使用两种方式来存储,关系数据库或者key value。
但是这些互联网业务本身并不属于这两种数据类型,比如用户在社会化平台中的关系,它是一个list,如果要用关系数据库存储就需要转换成一种多行记录的形式,这种形式存在很多冗余数据,每一行需要存储一些重复信息。
如果用key value存储则修改和删除比较麻烦,需要将全部数据读出再写入。
Redis在内存中设计了各种数据类型,让业务能够高速原子的访问这些数据结构,并且不需要关心持久存储的问题,从架构上解决了前面两种存储需要走一些弯路的问题。
2. Redis不可能比Memcache快很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。
但是测试结果基本是Redis占绝对优势。
一直在思考这个原因,目前想到的原因有这几方面。
Libevent。
和Memcached不同,Redis并没有选择libevent。
Libevent为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。
Redis用libevent中两个文件修改实现了自己的epoll event loop(4)。
业界不少开发者也建议Redis使用另外一个libevent高性能替代libev,但是作者还是坚持Redis应该小巧并去依赖的思路。
一个印象深刻的细节是编译Redis之前并不需要执行./configure。
CAS问题。
CAS是Memcached中比较方便的一种防止竞争修改资源的方法。
CAS实现需要为每个cache key设置一个隐藏的cas token,cas相当value版本号,每次set会token需要递增,因此带来CPU和内存的双重开销,虽然这些开销很小,但是到单机10G+ cache以及QPS上万之后这些开销就会给双方相对带来一些细微性能差别(5)。
3. 单台Redis的存放数据必须比物理内存小Redis的数据全部放在内存带来了高速的性能,但是也带来一些不合理之处。
比如一个中型网站有100万注册用户,如果这些资料要用Redis来存储,内存的容量必须能够容纳这100万用户。
但是业务实际情况是100万用户只有5万活跃用户,1周来访问过1次的也只有15万用户,因此全部100万用户的数据都放在内存有不合理之处,RAM需要为冷数据买单。
这跟操作系统非常相似,操作系统所有应用访问的数据都在内存,但是如果物理内存容纳不下新的数据,操作系统会智能将部分长期没有访问的数据交换到磁盘,为新的应用留出空间。
现代操作系统给应用提供的并不是物理内存,而是虚拟内存(Virtual Memory)的概念。
基于相同的考虑,Redis 2.0也增加了VM特性。
让Redis数据容量突破了物理内存的限制。
并实现了数据冷热分离。
4. Redis的VM实现是重复造轮子Redis的VM依照之前的epoll实现思路依旧是自己实现。
但是在前面操作系统的介绍提到OS也可以自动帮程序实现冷热数据分离,Redis只需要OS申请一块大内存,OS会自动将热数据放入物理内存,冷数据交换到硬盘,另外一个知名的“理解了现代操作系统(3)”的Varnish就是这样实现,也取得了非常成功的效果。
作者antirez在解释为什么要自己实现VM中提到几个原因(6)。
主要OS的VM换入换出是基于Page概念,比如OS VM1个Page是4K, 4K中只要还有一个元素即使只有1个字节被访问,这个页也不会被SWAP, 换入也同样道理,读到一个字节可能会换入4K无用的内存。
而Redis自己实现则可以达到控制换入的粒度。
另外访问操作系统SWAP内存区域时block进程,也是导致Redis要自己实现VM原因之一。
5. 用get/set方式使用Redis作为一个key value存在,很多开发者自然的使用set/get方式来使用Redis,实际上这并不是最优化的使用方法。
尤其在未启用VM情况下,Redis全部数据需要放入内存,节约内存尤其重要。
假如一个key-value单元需要最小占用512字节,即使只存一个字节也占了512字节。
这时候就有一个设计模式,可以把key复用,几个key-value放入一个key中,value再作为一个set存入,这样同样512字节就会存放10-100倍的容量。
这就是为了节约内存,建议使用hashset而不是set/get的方式来使用Redis,详细方法见参考文献(7)。
6. 使用aof代替snapshotRedis有两种存储方式,默认是snapshot方式,实现方法是定时将内存的快照(snapshot)持久化到硬盘,这种方法缺点是持久化之后如果出现crash则会丢失一段数据。
因此在完美...
Redis和Memcache的区别分析
1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3. Redis支持数据的备份,即master-slave模式的数据备份。
4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存来看下Redis作者对比redis和memcache来源:《Is memcached a dinosaur in comparison to Redis?》(相比Redis,Memcached真的过时了吗?)没有必要过多的关心性能,因为二者的性能都已经足够高了。
由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上 Redis在存储小数据时Memcached性能更高。
而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。
(比如瓶颈可能会在网卡)如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
当然,这和你的应用场景和数据特性有关。
如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。
即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
当然,最后还得说到你的具体应用需求。
Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。
这大大增加了网络IO的次数和数据体积。
在Redis中,这些复杂的操作通常和一般的 GET/SET一样高效。
所以,如果你需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。
不过memcache还可用于缓存其他东西,例如图片、视频等等。
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。
Redis可以通过例如expire 设定,例如expire name 105、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。
都可以一主一从6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复8、Redis支持数据的备份,即master-slave模式的数据备份。
关于memcache和Redis的区别和总结
aof目的主要是数据可靠性及高可用性,在Redis中有另外一种方法来达到目的:Replication。
由于Redis的高性能,复制基本没有延迟。
这样达到了防止单点故障及实现了高可用。
要想成功使用一种产品,我们需要深入了解它的特性。
Redis性能突出,如果能够熟练的驾驭,对国内很多大型应用具有很大帮助。
redis,memcache 与 mysql ,oracle 的区别,都叫数据库吗?
将Docker安装到CentOS或Fedora上 要将Docker安装到CentOS上,首先启用EPEL软件库,然后使用yum命令:$ sudo yum install docker-io $ sudo service docker start $ sudo chkconfig docker on 要将Docker安装到Fedora上,使用下面这些命令:$ sudo yum install docker-io $ sudo systemctl start docker.service $ sudo systemctl enable docker.service 将Docker安装到CentOS或Fedora上后,你需要将自己添加到docker群组,那样才能以非root用户的身份来运行Docker。
为此,使用这个命令:$ sudo usermod -a -G docker $USER 退出,重新登录,以激活群组变更。
至此,你应该能够以非特权用户的身份来运行docker命令了。
Docker的基本用法 你想启动一个新的Docker容器,就需要确定为容器使用哪个Docker映像。
你可以搜索官方的Docker映像索引(),上面列出了公开可用的Docker映像。
Docker索引包括:Docker团队管理的Linux基本映像(比如Ubuntu、Debian、Fedora和 CentOS),以及用户贡献的自定义映像(比如MySQL、Redis和WordPress)。
比如说,想在交互模式开启动一个Ubuntu容器,就要运行下面这个命令。
容器一启动,最后的变量“/bin/bash”就在容器里面执行。
$ docker run -i -t ubuntu /bin/bash 你头一次运行上面这个命令时,它会通过网络下载可用的一个或多个Ubuntu docker映像,然后使用该映像,启动Docker容器。
Ubuntu容器会立马启动,你会看到容器里面的控制台提示符。
你可以访问容器沙箱里面的功能完备的Ubuntu操作系统。
如果你在提示符处键入“exit”,就会退出容器,容器会被停止。
想列出所有的容器(包括已停止的容器),运行这个命令:$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a08a0b2bb4c ubuntu:14.04 /bin/bash About a minute ago Exit 0 cocky_ritchie 想在守护进程模式下重新启动某个已停止的容器:$ docker start [container-id] 想移除某个已停止的容器:$ docker rm [container-id] 想连接到后台运行的容器,以便查看容器或与之交互:$ docker attach [container-id] 你可以随意定制某个运行中的容器(比如安装新软件)。
如果你想把变更内容保存在当前容器中,先要在提示符处键入“exit”,退出容器的交互模式。
然后使用这个命令,将已变更的映像保存为不同的映像:$ docker commit [container-id] [new-image-name] 想获得你容器的容器ID,可以使用之前描述的“docker ps –a”命令。
一旦你已构建了像这样的新映像,就可以借助该映像启动一个新的容器了。
你还可以下载任何公开的容器映像(比如ubuntu,bowery/mysql),将它们保存到本地软件库中,如下所示。
$ docker pull [image name] 想查看所有本地下载/保存的容器映像:$ docker images 你可以选择从哪个特定的映像来启动容器:$ docker run -i -t [image-id] /bin/bash 想从本地软件库移除某个容器映像:$ docker rmi [image-id] 将Docker安装到CentOS或Fedora上 要将Docker安装到CentOS上,首先启用EPEL软件库,然后使用yum命令:$ sudo yum install docker-io $ sudo service docker start $ sudo chkconfig docker on 要将Docker安装到Fedora上,使用下面这些命令:$ sudo yum install docker-io
转载请注明出处51数据库 » wordpress redis memc