Redis緩存機制一為什么要用Redis


1、持久化數據庫的缺點

  1)存儲在部署數據庫的硬盤上

         平時我們使用的關系型數據庫有MySql,Oracle以及SqlServer等,通常通過數據驅動來鏈接數據庫進行增刪改查。
         那么我們日常使用的數據庫都存在哪里?我們以MySql為例。打開MySql所在的文件夾目錄下的data文件夾,如圖所示:
        也就是說我們日常使用的關系型數據庫中的數據,全部存儲在我們部署數據庫的機器的硬盤中。

     
    2)訪問速度
           
          服務器的讀寫效率是網站運行速度的重要條件,當然還有服務器的寬帶,但是這些可以通過硬件的升級更新等辦法來解決。
        服務器處理數據的速度,與網站速度息息相關,而數據查詢、數據處理等和數據庫處理速度有關。所以,提高數據庫處理數  據的能力很重要。
        其實,sql語句優化可以提高處理效率。但是如果網站的訪問量非常大的時候,我們的數據庫壓力就變大了。數據庫的連接 池、處理數據的能力就會面臨很大的挑戰。此時就要使用高並發處理、負載均衡和分布式數據庫了。但是,這些會花費很大的人力、資金。

 

2、緩存介紹
     1)定義

          緩存就是在內存中存儲的數據備份,當數據沒有發生本質變化的時候,我們避免數據的查詢操作直接連接數據庫,而是去    內容中讀取數據,這樣就大大降低了數據庫的讀寫次數,而且從內存中讀數據的速度要比從數據庫查詢要快很多。
     
     2)緩存的形式
          頁面緩存(smarty靜態化技術):頁面緩存經常用在CMS(content manage system)內存管理系統里面。
          數據緩存:經常會用在頁面的具體數據里面。

3、Redis介紹
     Redis是Remote Dictionary Server(遠程數據服務)的縮寫,由意大利人antirez(Salvatore Sanfilippo)開發的一款內存高速緩存數據庫,該軟件使用C語言編寫,它的數據模型為key-value。
     它支持豐富的數據結構(類型),比如String/List/Hash/Set/Sorted Set。

     可持久化(一邊運行,一邊把數據往硬盤中備份一份,防止斷電等情況導致數據丟失,等斷電情況恢復之后,Redis再把硬盤中的數據恢復到內存中),保證了數據的安全。

    1)高速讀寫(因為是在內存上的數據庫)
    2)數據類型豐富
    3)支持持久化(把內存上的數據寫到磁盤上)
    4)多種內存分配及回收策略
    5)支持多事物
    6)消息隊列、消息訂閱(先訂閱后發送)
    7)支持高可用
    8)支持分布式分片集群

4、為什么選擇Redis
    1)Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
    2)Redis支持master-slave(主-從)模式應用
    3)Redis支持數據持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
    4)Redis單個value的最大限制是1GB,memcached只能保存1MB的數據。

 參考: https://blog.csdn.net/weixin_42184707/article/details/80361464

 

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import redis.clients.jedis.Jedis;


public class RedisJava {

  

public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
System.out.println("連接成功");
//查看服務是否運行
System.out.println("服務正在運行: "+jedis.ping());

//1.
jedis.set("runoobkey", "www.runoob.com");
// 獲取存儲的數據並輸出
System.out.println("redis 存儲的字符串為: "+ jedis.get("runoobkey"));

//2.
//存儲數據到列表中
jedis.lpush("site-list", "Runoob");
jedis.lpush("site-list", "Google");
jedis.lpush("site-list", "Taobao");
// 獲取存儲的數據並輸出
List<String> list = jedis.lrange("site-list", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("列表項為: "+list.get(i));
}


//3. 獲取數據並輸出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}


}


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM