关于Mybatis的缓存机制以及Memached

关于缓存的问题,
首先我们要知道为什么需要用到缓存——
在我们做接触的缓存中大多是与数据库想关系的,而我们在实现业务也数据库相交互的时候,都会涉及底层框架JDBC,<不论是Hibernate还是Mybatis>,那么JDBC在实现操作数据库的增删改查是都会体现io流的操作,所以为了避免这种频繁的与数据库交互也增强了查询效率,提高用户的体验,我们使用缓存的形式,以付出内存来提高效率和安全,下面简单说一下关于Mybatis的缓存机制:
就目前来看Mybatis提供了两种缓存机制(一级缓存.二级缓存),然而对于一级缓存,Mybatis是默认开始的,一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。每次执行缓存,都会创建一个SqlSession对象,然而一级缓存机制也紧紧存活在一次会话当中我们以图为例:这里写图片描述
下面来说下二级缓存,二级缓存区分于一级缓存最大的收益就是他不仅仅存活在一次会话,他是属于一种Application级别的缓存,存活时间想当然,但是基于二级缓存的Mybaits一定要实现序列化接口。
关于Mybatis的缓存机制也就这么多了,下面说一下我接触到的分布式缓存机制:Redis的缓存框架给我们封装好了,仔细说一下冠以Memached的分布式缓存**
Memcached是一款免费,开源的,高性能的分布式缓存系统。当然这两种缓存是不一样的,一会在来说一下他们之间的区别,但是,你可以把redis比作一种数据库但是Memcached不是,他只是一个缓存系统,为啥这么说呢?我们说Redis可以通过RDB和AOF实现持久化,但是Memcached是没有持久化的,缓存没了就是没了,还需要从新在数据库中加载,所以啊,Memcached就是一种缓存系统,人家框架出来的目的就是为了让你缓存用的,你当别的用出了问题也怨你自己啊!
特点: 1 使用简单的key-value 存储的话,Memcached 的内存利用率更高。
2 频繁使用小数据,将这些小数据进行缓存,定期持久化就可以了,查询操作一直都 在内存中运行。
3 Memcached 仅限于缓存数据的应用,即使当机了,也不影响业务正常开展的这种
关于缓存的算法的主要有两种,余数算法和一致性Hash算法,简单说一下对这两种算法的理解:
余数算法:key.hashCode() % nodeCount=nodeIndex
主要是通过key的hash值 模上 服务器数量 对应的连接就是要存储的节点
这个比较简单,不多说了,
他的主要缺点就是如果服务器的数量发生变化,所有的服务器缓存都会在同一时间失效,这样所有的缓存都当机了,全部需要回到数据库从新操作,服务器会咋样想想都知道了
图例:这里写图片描述
一致性hash算法:这个就比较牛逼了,具体说下Memcached是怎么通过这种算法实现缓存的!
他首先是先求出memcached服务器节点的哈希值,并将其配置在0~2的32次方 的圆上如图所示这里写图片描述
然后在采用同样的方法算出存储数据key的hash值,然后映射到相同的圆上,然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第⼀一个服务器器上。如果超过232 仍然找不不到服务器,就会保存到第一台memcached服务器器上 添加一台memcached服务器。余数分布式算法由于保存键的服务器器会发⽣生巨⼤大变化⽽而影响缓存 的命中率,但Consistent Hashing中,只有在圆(continuum)上增加服务器器的地点逆时针⽅方向 的第⼀一台服务器器上的键会受到影响,如下图所示:这里写图片描述
就是啥,每个缓存的节点都会找附近顺时针对应的最近的node上
这里写图片描述
就比如我在nodeB和nodeC有节点对应的缓存,假如C不行当机了NodeX就会寻找逆时针最近的服务器,这样来说受影响的只是服务器B和其他都没啥关系,对于数据库也没啥压力,对吧?他就是这个思想。一致性哈希算法是缓存机制应用的核心!
说了这么多 使用Redis实现缓存和Memached缓存的区别是啥呢?简单来说下:
1.Redis不仅仅可以key/values存储数据,还可以提供list set zset hash等类型的存储,而Memached只有key/values的存储方式,所以他的应用相对广泛
2.Redis支持数据的备份,即master-slave模式的数据备份
3.Redis支持数据持久化{RDB 和AOF},将数据保存在磁盘中下次还可以提取出来,Memached不支持
4.redis单线程 Memcached多线程
5.Redis允许values最大512mb Memcached的values允许最大1mb
就差不多这些 个人感觉还是redis好,嘻嘻,毕竟用的多还不用多学习其他框架结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值