1、缓存优化性能,降低负载
本地缓存空间有限,也无法共享,所以需要分布式缓存 memcached/redis
2、NoSql ,泛指非关系型数据库,
web2.0网站越来越复杂,流量越来越高,数据量越来越大,数据不再是严格的关系型,nosql不是严格面向对象式,类型(key-value hashtable list set) 更灵活,而且通常用内存管理,速度也更快
3、Redis Remote Dictionary Server 远程字典(内存)服务器
基于内存管理,实现了多种数据结构,单线程模型的应用程序,提供插入-查询-固化-集群功能
内存管理:速度快。数据可能丢失,只能做缓存而不是存储
redis :两种固化到硬盘的方式,一种:snapshot 常用的,速度快,但是如果崩溃可能丢失一段数据
可以配置一些自动保存策略,1分钟只要又修改就保存,30分钟修改多少次就保存
save /bgsave 命令 ,主动save阻塞(单线程),bgsave非阻塞(子进程)的
AOF:通过日志恢复数据,任何操作都需要日志,这个效率太低,数据不会丢失(高可用)
多种数据结构: string ,hashtable ,set zset list 丰富的数据结构带来了灵活性,可以应对特殊的应用场景
单线程:线程安全 ,web 就是多线程, sql server 多前程
多线程可以提升性能,充分利用硬件资源
nodejs ,redis 单线程
Redis:内存数据结构操作,很长的链表,日过多个线程同时来操作,为了保证线程安全,不得不加锁,锁多了之后,多线程没有优势,甚至可能更低,redis全部都是内存操作,其实一个线程就够快了,
(单线程的性能极致是要输给多线程的,CPU调度室,同一个进程的切换肯定比切换进程快)
原子性:因为全程只有一个吸纳成可以操作数据,完全没有冲突的概念
就是一个不可分割的追赠里,要么都成功,要么都失败,不会出现中间状态
Redis 每一个命令都是原子性的
Virtual Memory :Redis会自动把一些冷门数据存到硬盘,可以存储超过内存的数据
Redis--SqlServer(执行脚本 上百个命令)
RDM--SqlServerClient
Ado.Net--ServiceStack /StackExchange(翻译脚本)
ServiceStack :付费(6000 query /min)
StackExchange:免费