關於用redis快取物件

2021-10-04 19:14:07 字數 2844 閱讀 6575

我們知道redis可以儲存的資料結構比memcached多,它包含hash,list等等

但是如果,我有乙個person物件,裡面兩個變數,username,password,我想儲存乙個person物件呢?

那很簡單呀,要麼使用pb把它序列化,要麼把物件轉成json字串

從速度上講pb要比json快

但是pb的結果是不可讀的,相比較於json,對程式設計師不是那麼友好

所以一般情況下,都是使用json的

package com.imooc.miaosha.redis;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.stereotype.service;

import com.alibaba.fastjson.json;

import redis.clients.jedis.jedis;

import redis.clients.jedis.jedispool;

@service

public

class

redisservice

finally

}/**

* 設定物件

* */

public

boolean

set(keyprefix prefix, string key, t value)

//生成真正的key

string realkey = prefix.

getprefix()

+ key;

int seconds = prefix.

expireseconds()

;if(seconds <=0)

else

return

true;}

finally

}private

string beantostring

(t value)

class<

?> clazz = value.

getclass()

;if(clazz ==

int.

class

|| clazz == integer.

class

)else

if(clazz == string.

class

)else

if(clazz ==

long

.class

|| clazz == long.

class

)else

}@suppresswarnings

("unchecked"

)private

t stringtobean

(string str, class

clazz)

if(clazz ==

int.

class

|| clazz == integer.

class

)else

if(clazz == string.

class

)else

if(clazz ==

long

.class

|| clazz == long.

class

)else

}private

void

returntopool

(jedis jedis)

}}

看到上面的**,朋友們可能要問那個keyprefix是個什麼東西

假如有個使用者,它的key是abc

假如有個訂單,它的key也是abc

而且,即使同乙個使用者,我也希望他在快取裡有兩個項,乙個是按照使用者名稱去查,乙個是根據**號碼去查

明白了吧?

我們保證每個模組內的資料的字首都是不一樣的,而且同乙個資料也可以儲存兩次

那具體怎麼實現呢?

package com.imooc.miaosha.redis;

public

inte***ce

keyprefix

package com.imooc.miaosha.redis;

public

abstract

class

baseprefix

implements

keyprefix

public string getprefix()

}package com.imooc.miaosha.redis;

public

class

userkey

extends

baseprefix

public

static userkey getbyid =

newuserkey

("id");

public

static userkey getbyname =

newuserkey

("name");

}package com.imooc.miaosha.redis;

public

class

orderkey

extends

baseprefix

public

static userkey getbyid =

newuserkey

("id");

public

static userkey getbyname =

newuserkey

("name");

}

關於Redis快取

業務場景 實時性要求不高的查詢 如果用redis做mysql的快取,key value中的值為乙個屬性 屬性值組成的hashmap,鍵的定義是個難點。鍵應該盡可能與mysql查詢的條件相關,請求呼叫的方法 controller裡分發 對應的查詢引數就可以唯一的確定查詢條件,如如 listusers....

關於Redis快取

什麼是快取穿透 有人惡意請求快取中存在的key,或者key集體過期,導致大量流量直接打到資料庫,資料庫肯定扛不住 解決方案 用布隆過濾器 什麼是快取雪崩 快取掛了,導致大量流量直接打到資料庫,資料庫肯定扛不住 解決方案 事前 redis主從 哨兵 集群部署 事中 mysql做限速和降級處理,超過處理...

關於redis清除快取

關於redis清除快取 linux 1.訪問redis根目錄 cd usr local redis 4.0.2。2.登入redis redis cli h 127.0.0.1 p 6379。3.檢視所有key值 keys 4.清空整個 redis 伺服器的資料 flushall 5.清空當前庫中的所...