1.缓存大家肯定都不陌生,redis是一种非关系型数据库,与mongoDB不同的是redis是内存数据库,所以访问速度很快,在ssm+maven项目中集成redis很简单,只需要引入redis客户端和spring对redis的支持的jar包,引入redis的相关配置就可以了。
spring集成redis所需依赖如下
再来spring中相关redis的配置
redis连接池客户端相关配置
下面是我们自己编写的一个简易的rerdis客户端,或则说是持久层吧
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。但是这里只是简单测试 所以只是支持string的存取
使用简易的接口来获取和存储
为了查看分片的效果,我启动了两个redis客户端窗口
通过接口我们来存两个值
通过接口来获取刚才存的值
通过我们自己做的简易redis持久层,似乎实现了Redis值的存储,但是什么叫分片呢?
第一个问题:什么叫分片
分片的概念:
分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。
如果只使用一个redis实例时,其中保存了服务器中全部的缓存数据,这样会有很大风险,如果单台redis服务宕机了将会影响到整个服务。解决的方法就是我们可以采用分片/分区的技术,将原来一台服务器维护的整个缓存,现在换为由多台服务器共同维护内存空间。
第二个问题:redis如何进行分片?
redis分区有两种方式,对既定的key有不同的方式来选择这个key存放到哪个实例中,也就是说有不同的系统来映射某个key到某个Redis的服务。
1.最简单的分区方式为范围分区,就是映射一定范围的对象到特定的Redis实例。比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推。
2.另外一种方式是hash一致算法实现分区,对key值进行hash一致性计算后得到结果,最终将数据保存到某一台redis实例中,具体的hash一致性算法可以自行百度一下。
我们这里redis似乎默认是第二种。
为了校验是否真的如上面所说,我们使用客户端窗口来分别获取一下这两个key值
由于之前存进去值似乎都到6380端口了 所以多存了几个值 看分片效果
spring对redis分片式集成就到这里,很久没去学习新的东西,也没对过去做个总结,出来也一年多时间,希望接着刚出来的步伐,继续不断学习进步,留下的笔记印证自己还在像前走,同时也希望自己往后继续不断学习!