mysql mongodb redis memcache apc

windows下只能安装php_memcache.dll 扩展并不存在 php_memcached.dll, 所以windows 中只能使用$mcd = new Memcache() 不能使用new Memcached()。
缓存的数据,当不存在时,应该有默认值,防止恶意请求,增加mysql请求。
内存和硬盘的关系,硬盘放置主体数据用于持久化存储,而内存则是当前运行的那部分数据,CPU访问内存而不是磁盘,这大大提升了运行的速度,当然这是基于程序的局部化访问原理。
Redis + MySQL,它是内存+磁盘关系的一个映射,MySQL 放在磁盘,Redis放在内存,这样的话,web应用每次只访问Redis,如果没有找到的数据,才去访问 MySQL。
前者是内存数据库,数据保存在内存中,当然速度快。
后者是关系型数据库,功能强大,数据访问也就慢。
Redis 和mc都是缓存,并且都是驻留在内存中运行的,这大大提升了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,比如 string存储;Redis却提供了大量的数据结构,比如string、list、set、hashset、sorted set这些,这使得用户方便了好多,毕竟封装了一层实用的功能,同时实现了同样的效果,当然用Redis而慢慢舍弃mc。

mysqlmongodbredismemcacheapc
关系型数据库。非关系型数据库,属于文档型数据库。非关系型数据库。内存Cache, 高性能的分布式内存对象缓存系统apc可以去掉php动态解析以及编译的时间。但是由于apc的容量很少,所以缓存的数据最好是那些很长时间都不变的数据。Apc 缓存将数据存放在共享内存块中,它是单台服务器最快的缓存介质。
查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。是独特的Mongodb的查询方式
存放持久化数据,将数据存储在硬盘中,读取速度较慢。数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。它占用的空间很大,因为它属于典型空间换时间原则的类型。数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据将数据分布于内存中并使用key-value存储结构的缓存系统
数据类型丰富json的存储格式支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。只支持简单的key-value存储,比如 string存储,不支持枚举,不支持持久化和复制等功能,MemcacheD在其数据结构中仅使用字符串和整数。如果需要保存数组或对象,则必须先将它们序列化然后保存。要阅读它们,您需要取消序列化。
支持事务处理不支持事务支持事物,比较弱,仅能保证事物中的操作按顺序执行并发场景下,用cas保证一致性
高度事务性的系统。传统的商业智能应用,针对特定问题的BI数据库会对产生高度优化的查询方式,对于此类应用,数据仓库可能是更合适的选择数据不是特别重要(例如通知,推送这些),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如地图的位置坐标),这些情况下用 MongoDB , 其他情况就还是用 MySQL ,这样组合使用就可以达到最大的效率。较小数据量的性能及运算 。适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统。session共享、购物车用来存储小块的任意数据(字符串、对象),值存储超过1mb需要压缩,且建不能超过250个字符。
MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性redis支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响;哨兵集群模式memcache不支持,通常用在做缓存,提升性能;Memcached不使用持久数据。使用Memcached时,数据可能会在重新启动时丢失,重建缓存是一个代价高昂的过程。
binlog备份,物理备份,mysqdump备份副本集rdb,aof,哨兵模式
数值、日期/时间和字符串(字符)类型string,integer,boolean,double,arrays,timestamp,object,null,symbol,date,object id,binary data,code,regular expression(db,collection)string,list,hash,set,sorted set,发布订阅,事务string

总结

mysql定位是持久化的关系型数据库。持久化:它的数据主要是存储在磁盘中,也导致它的读取速度不快,如果频繁的请求也会导致负载过高;关系型:它支持关联型的查询和统计;Innodb支持事务处理。
redis定位是可持久化的缓存nosql数据库。可持久化:它的数据主要是存储在内存中,可通过aof和rdb将内存中的数据持久化到磁盘中;缓存:由于它的数据主要存储在内存中,虽然读取速度更快,但内存的价格远高于磁盘,所以它无法存储海量数据,而是作为缓存数据库存储一些热数据;nosql:不能进行一些复杂的查询;redis的事务处理比较弱。
momgodb定位是持久化的最类似mysql的文档型数据库。持久化:它的数据主要存储在磁盘上,能存储海量数据,但会把热数据加载到内存中,所以它的读写速度比mysql快,性能上和redis一样不会是瓶颈;最类似mysql:虽然它的数据类型比较简单,但它的查询功能强大,擅长查询json数据,能存储海量数据,但不支持事务处理;文档型:由于数据类型单一,只支持json的存储格式,所以它适合数据结构变化频繁,且数据并发性高的数据存储。
memcache定位是高性能的分布式的内存对象缓存系统。内存对象:它的数据是存储在内存对象上的,不是存储在内存文件上的,这些对象不是持久化的,服务停止,数据就丢失;分布式:memcache的分布式主要实现是在客户端,客户端对key值进行一定算法,切换到对应memcache服务器存储。
elasticsearch定位是分布式、高扩展、高实时的大数据的搜索和分析的引擎。分布式:主要是es集群,决定了它能存储海量数据;高扩展:由于es的数据分布算法主要是通过hash(_routing) % num_primary_shards计算,所以如果进行横向扩展,只需重新创建索引,再将数据导入即可;高实时:es可以设置"refresh_interval" : “1s”,也就是说,索引完数据1秒后就能被搜索到了,达到近实时搜索的效果;搜索:es支持多种搜索插件,能更好的进行分词;分析:es支持相关度评分。
rabbitmq定位是一个实现了AMQP高级消息队列协议的消息队列服务。消息队列主要是实现应用程序间的异步和解耦。解耦:生产者生产消息,消费者消费消息,生产者与消费者间没关系;异步:分布式事务的支持,RPC的调用。

缓存扩展

缓存穿透:访问key未在DB查询到值,也将空值写入缓存,但可以设置较短的失效时间。
缓存雪崩:可以给缓存设置过期时间时加上一个随机值时间,使得不会在同一时刻失效。
缓存击穿:访问key前,用SETNX设置一个短期的key来控制住访问。
分布式锁要点:要点1:互斥性,任意时刻只有一个客户端能持有锁;要点2:不会发送死锁,即使一个客户端持有锁的期间崩溃没有释放,也要确保后续其他客户端可以持有锁;要点3:加锁和解锁必须是同一客户端。
分布式锁加锁:1.使用setnx命令保证互斥性;2.设置锁的过期时间,避免死锁;3.setnx和设置过期时间需要保证原子性(新版本redis已经实现set同时设置ttl),避免客户端突然崩溃造成死锁;4.加锁的value值为一个唯一标识,保证同一客户端进行解锁。
分布式锁解锁:1.拿到加锁的唯一标识,确保是同一客户端;2.拿到锁确认和解锁要原子性操作。
zookeeper定位是解决分布式数据一致性的服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值