之前學習shiro作爲權限框架。由於項目是分佈式的,也就是說每一個獨立的部分都配置了一整套完整的shiro(個人覺得不合理,但是還沒有想到好的解決方案)。這裏導致的問題是權限的信息緩存後,各個的獨立部署的子項目的緩存不同步。假如這時候,授權更改了用戶的權限信息就會導致權限信息不一致。所以,我們需要將緩存抽出來作爲一個服務器存在,然後就決定選用redis作爲緩存服務器。本篇博客,先大概的對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操作元素。
NoSQL
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的很多特性和優點都還沒有很深的體會,正在學習中。下篇再見!