redis的本质
1.一台远程服务器,通过sokect连接客户端,并向客户端提供缓存服务(提供了5种标准的缓存数据结构)
2.为什么客户端不在本地用Map缓存数据,而需要一台独立的服务器做缓存?
1)因为分布式和集群概念兴起,一个应用,需要多台服务器协同工作,多台服务器意味着多个JVM
2)多个JVM意味着跨JVM,跨JVM意味着我们要如何保证不同JVM的本地缓存数据保持最终一致性?
3)为了绕开这个问题,redis另起炉灶做了个客户端共用的缓存服务器,并向多个客户端提供缓存服务
4)缓存服务器就类似一个远程的共享内存块,多个客户端向服务器发送读写命令,都是读写同一个内存块的数据
3.redis缓存比本地缓存(Map)的优势
1)redis对外定义了5种标准的缓存数据结构,而虽edis的key只支持string,但value支持string,list,set,zset,hash
2)redis作为一个完整的缓存中间件,实现了很多实用的功能,而这些功能Map都是不具备的,若要具备,需要Map独立实现
3)例如持久化,zset排序功能,set并差集操作,string的自增功能,一些统计功能,以及一些缓存失效策略
4)读写命令操作都是原子操作,不需要像HashMap一样手动保证线程安全
5)支持分布式的数据分片功能,高可用的主从配置以及数据备份功能
4.redis和mysql的区别
1)redis追求性能的最大化,牺牲了一定的持久性、一致性,mysql追求数据的持久性、一致性,也牺牲了一定的性能
2)两者架构有些类似,也有不同,但是数据存放的架构模式类似:内存+磁盘
3)redis内存:内存存放的主要是热点数据,数据纯内存操作,即使单线程处理,运行速度也很快
4