之前学习shiro作为权限框架。由于项目是分布式的,也就是说每一个独立的部分都配置了一整套完整的shiro(个人觉得不合理,但是还没有想到好的解决方案)。这里导致的问题是权限的信息缓存后,各个的独立部署的子项目的缓存不同步。假如这时候,授权更改了用户的权限信息就会导致权限信息不一致。所以,我们需要将缓存抽出来作为一个服务器存在,然后就决定选用redis作为缓存服务器。本篇博客,先大概的对redis做一个了解。
首先,redis(REmote DIctionary Server)是一个开源的key-value数据库。Key-vlue这种形式之前只在map、hash等数据类型中见过。也就是说数据在redis中是以key-value的形式存在的。
redis的value不仅基本的string类型还可以是list、set、sorted set、hash。不过,这些类型中的元素还是String类型的。redis还提供了对这些类型的原子性的操作。比如对一个String的value追加字符串,对list进行push或者pop操作元素。
redis是一个典型的NoSql的数据库,NoSql是非关系型数据库的统称,是Not Only Sql的缩写。它只将key作为检索的数据的唯一标识。之前知道的只有一个MongoDB是非关系型的。
前面说了redis是key-value的形式存储数据的。它的value提供了多种数据结构的支持。这有什么值得称奇的地方吗?大家想想,这样的话其实我们所熟悉的所有数据都被抽象成了两个部分即key和value。也就是说实际上所有数据都可以公用一个实体。
1)支持开发者可以将程序中的数据直接映射到Redis中
2)对不同数据类型提供了非常方便的操作方式,如使用集合类型存储文章标签,Redis可以对标签进行如交集、并集这样的集合运算操作。
并且redis的value是以二进制的字节流来存储任何数据格式的,这样做可以使所有数据的同质化。但是也,限制了上面说的它只能以key作为唯一的查询条件。
之前使用的缓存EhCache、Memcached的数据存储都是在内存中的。这就是说当你的电脑重启或者遇到故障关机之后你缓存中的数据就丢失了。而redis提供了数据持久化的功能。
redis提供了两种数据持久化方案。第一种是:根据定制的条件来触发持久化操作,比如,如果发生了1000次以上的修改,就60s触发一次持久化操作,将数据同步到磁盘上。
第一种方案,也就是说首先数据是在内存中被操作的,那么这个反应数据就会非常的快。因为它避免了磁盘IO操作的发生。这样做的缺点是会在电脑断电等异常情况发生时丢失还没有来得及同步到内存中的数据。所以就有了第二种持久化方案。
第二种是:Append机制,这种机制是指只要有修改该发生就开始同步到磁盘。很显然,相对与第一种肯定要丧失一定的性能。
①提供了几十种不同编程语言的客户端库,很好的封装了Redis的命令,使得在程序中与Redis交互变得更容易。
②使用简单
③支持分布式,提供很简便的主从配置以及数据备份策略配置。
④丰富的数据类型
总结:其实,目前对redis的了解还是很粗浅的。而且大部分redis的功能都没有涉及到,我只是将redis作为一个缓存来使用。对于redis的很多特性和优点都还没有很深的体会,正在学习中。下篇再见!