1. 程式人生 > >【Redis基礎】Redis在專案中實戰

【Redis基礎】Redis在專案中實戰

redis搭建,叢集搭建,多屬於運維知識,基本瞭解就可以。但是在專案如何讓redis發揮它的特長就屬於我們需要掌握和探索的。接下來講解一下在專案中如何使用redis來做快取的。

適用場景

什麼樣的情況才會用到快取呢??一個專案中有些資料長時間不會發生變動,但是使用者又訪問特別頻繁。我覺得這樣的情況會用到快取。從我們專案的使用情況,我總結出來了這一點。

我們專案的首頁上會有一些大的廣告位,而且大家都知道使用者最先訪問的都會是首頁,所以訪問特別頻繁,廣告更換也不會很頻繁,所以我們覺得用在這裡挺合適的。

如何讓資料從快取中取到

第一,我們首先會判斷快取中是否有該資料,如果沒有就從資料庫中獲取,返回給前臺的同時存入到快取一份兒。如果快取中有資料,則直接返回快取中的資料。(只擷取一段兒程式碼,主要給大家講解思路)

@Override
public List<TbContent> getContentList(Long cid) {
	// 查詢資料時,先從快取查詢,有就直接返回
	try {
		String json = jedisClient.hget(REDIS_CONTENT_KEY, cid + "");
		if (!StringUtils.isEmpty(json)) {
			// 把json資料轉換成List
			List<TbContent> jsonToList = JsonUtils.jsonToList(json,
					TbContent.class);
			return jsonToList;
		}
	} catch (Exception e1) {
		e1.printStackTrace();
	}
	// 如果沒有則查詢資料庫
	// 根據cid查詢內容列表
	TbContentExample example = new TbContentExample();
	Criteria criteria = example.createCriteria();
	criteria.andCategoryIdEqualTo(cid);
	// 執行查詢
	List<TbContent> list = contentMapper.selectByExampleWithBLOBs(example);

	// 查詢之後再放入快取
	// 有關content的儲存在一個hash中,key為REDIS_CONTENT_KEY
	// 其中每項的item為contentCid,value為list(list要轉換成json)
	try {
		jedisClient.hset(REDIS_CONTENT_KEY, cid + "",
				JsonUtils.objectToJson(list));
	} catch (Exception e) {
		e.printStackTrace();
	}
	return list;
}

如何讓快取中的資料與資料庫中的保持同步

剛開始接觸的時候,我有一個疑問,不知道大家有沒有,就是在專案中如果使用redis做快取的話,如果資料有變化的時候怎麼讓redis中的資料與資料庫中的保持同步。應該會有很多種方法,我們專案中用的是下面這種方法。

在後臺對大廣告位的內容進行新增或修改或刪除的同時刪除快取中大廣告位的資訊。

/**
     * 新增內容
     * @param content
     * @return 
     */
    @RequestMapping("/save")
    @ResponseBody
    public TaotaoResult insertContent(TbContent content){
        TaotaoResult result = null;
        try {
	//新增大廣告位資訊
            result = contentService.insertContent(content);
            
            //刪除快取中的資訊
            jedisClient.hde(REST_BASE_URL+REST_CONTENT_SYNC_URL+content.getCategoryId());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

redis的功能很強大,目前只接觸到redis做快取的功能,其它還在探索中。




相關推薦

Redis基礎Redis專案實戰

redis搭建,叢集搭建,多屬於運維知識,基本瞭解就可以。但是在專案如何讓redis發揮它的特長就屬於我們需要掌握和探索的。接下來講解一下在專案中如何使用redis來做快取的。 適用場景 什麼樣的情況才會用到快取呢??一個專案中有些資料長時間不會發生變動,但是使用者又訪問

Java基礎Java註解成員支援的型別說明

Java註解是java提供的一個很好的工具,那麼在自定義註解的時候,其內部成員可被允許的型別又有哪些呢? 根據 JLS中章節9.6.1 的說明,Java中註解成員的型別必須是如下幾類: 1. 基本資

Java基礎java繼承的構造方法

小編現在學習了一下繼承中的構造方法,覺得還是總結一下比較好。【特點】1、子類的構造的過程中必須呼叫其基類的構造方法。2、子類可以在自己的構造方法中使用super(argument_list)呼叫基類的構

java基礎collection介面toArray()的使用方法

Collection介面中有兩種toArray()方法 Object[] toArray()           Return an Array Containing all of the elements in this collection. <T> T[]

問題處理iOS專案使用第三方字型無效果,怎麼辦?

遇到問題在確認已將字型新增到專案中後,呼叫字型檔案依然無效,怎麼辦?(如何新增字型到iOS專案中?請右拐,進傳送門)可能原因1. 你的字型檔案中只包含“英文字型”,那對你的漢字自然是不管用。(如何檢視?參考3)2. 你用的是“繁體”的字型檔案,那對你的簡體漢字自然不管用,請檢

API知識SpringBoot專案@EnableXXX的原理

@EnableXX註解的使用場景 SpringBoot為開發人員提供了很多便利,例如如果想要定時功能,只要新增@EnableSchedule,即可配合@Schedule註解實現定時任務功能,不需要額外配置定時任務的處理執行緒,就可以直接使用(框架提供預設配置,在找不到使用者自定配置的執行器時,使用預設配置)

Redis學習Redis筆記(一)——特點、基礎命令和資料結構

更新時間:2018-10-13 Redis的特性 速度快 持久化(斷電不丟資料) 多種資料結構 支援多種客戶端語言 功能豐富 操作簡單 主從複製 高可用,分散式 Redis的通用命令 key

Redis基礎持久化機制

1.RDB (1) 定義 RBD:snapshotting(快照)是預設方式,將記憶體中資料以快照的方式寫入到二進位制檔案中,預設檔名為dump.rdb (2)觸發rdbSave過程的方式 save命令:阻塞Redis伺服器程序,直到RDB檔案建立完畢

Redis基礎客戶端原始碼解析

1.定義 Redis客戶端與伺服器之間通過TCP協議進行通訊。TCP協議是一種流式協議,資料以位元組流的形式進行傳遞,沒有固有的”報文”或”報文邊界”的概念,如果需要設定邊界,需要應用層自行處理。 2.原始碼 客戶端redis.h/redisClien

基礎在css繪制三角形及相關應用

3.1 三角形 分享圖片 繪制 提示框 穩定 核心 包括 邊框顏色 簡言 本文簡要闡述了用CSS邊框的方法在頁面上繪制三角形,包括幾種典型的三角形繪制,還介紹了幾個簡單的應用場景。利用邊框繪制三角形方法只是眾多方案中的一種,大家根據項目實際,選用最適宜項目的方案。 1 基

Redis錯誤-Redis存、取異常之序列化問題

問題場景:因業務不斷擴充套件,實體類有較多的重複欄位,故要優化資料結構,從而優化系統性能,增加程式碼的可複用性。測試環境和預生產都沒有問題,到生產有部分欄位取不到數值,關了快取開關後,發現業務程式碼正常了,開啟快取就會出現各種null異常。 問題分析:Redis存進去的日誌正常,去的時候要麼少欄

Redis學習--Redis叢集搭建

文章目錄 1. Redis部署 1.1 安裝依賴環境 1.2 安裝 Redis 1.3 啟動Redis 前臺啟動: 後臺啟動: 1.4 測試客戶端可用情況:

exeelectron專案使用jquery不生效的解決方法

electron專案中jquery沒法用的解決方法,比較簡單的方式就是在引入jquery之前加入一下程式碼: <script> window.nodeRequire = require; delete window.require; delete window.exports

Redis學習Redis入門安裝及使用

第一份工作的時候就聽著老大說要使用Redis,當時一臉懵逼,到底什麼是Redis呢,Redis又有什麼作用的。不過還沒來得及向老大學習的時候,公司找了些理由就把所有的員工都給開了。趁著這段找工作的時間,正好可以來好好研究一下Redis了。廢話不多說,開始!

java基礎java的集合概述

1、為什麼要有集合          在實際開發中,除了單例的物件,我們可以知道其數量,其他物件的數量只能在程式執行時才可以知道建立多少個物件。如果在程式開發階段,我們並不知道物件的數量,以及物件的準確型別,那麼這些物件用什麼來容納呢?我們首先想到了陣列,但是眾所周知,陣列

C語言實際專案開發過程常用C語言函式的9大用法

C語言是當中最廣泛的計算機程式語言,是所有計算機程式語言的祖先,其他計算機程式語言包括當前流行的Java語言,都是用C語言實現的,C語言是程式設計效率最高的計算機語言,既能完成上層應用開發,也能完成底層硬體驅動程式設計,在計算機程式設計當中,特別是在底層硬體驅動開發當中,具有不可替代的作用。

JAVA基礎java繼承鏈方法呼叫優先順序.順序:this.show(object)>super.show(object)>this.show((super)object)>super.show(

先上程式碼: public class ExtendsTest { public static void main(String args[]){ A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); S

面試題Redis相關

1.Redis與Memorycache的區別? Redis使用單執行緒,而Memcached是多執行緒, Redis使用現場申請記憶體的方式來儲存資料,並且可以配置虛擬記憶體;Memcached使用

redisredis的單節點/叢集方式搭建及說明

第一部分:安裝 1.單節點搭建 2.解壓 tar xf xxx 3.下載gcc,tcl 命令編譯器 yum -y install gcc tcl (命令名字別寫錯) 4.編譯、建立目錄、拷貝m

AI測試人臉識別性別識別模型評價(專案例項)

以人臉識別中的性別識別測試為例項,對整個測試過程進行詳細講解。 舉例有一個專案,要求是輸入一張人臉照片,使用演算法對照片中人物的性別進行預測男 或 女。 測試人員需要對演算法模型的表現進行評價,輸出客觀的評價指標。 測試工作開展: 一、需求分析,檢視需求文件,瞭