Redis_框架整合1_SpringBoot

Spring+Redis步驟

(1)僵芹、引入pom依賴?

<dependency>

?????????<groupId>?org.springframework.boot</groupId>

?????????<artifactId>?spring-boot-starter-data-redis</artifactId>

</dependency>

(2)琉用、引入RedisTemplate類衅谷,并創(chuàng)建RedisConfig配置類(@Configuration)?茅茂,設置redisConnectFactory,將RedisTemplate連接工具bean注入到Spring容器

(3)往堡、引入封裝RedisTemplate api的Redis工具類: RedisService/RedisUtils

(4)坝疼、引入Redis配置文件 application.properties

# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09

spring.redis.database=0

# Redis\u670D\u52A1\u5668\u5730\u5740

spring.redis.host=localhost

# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3

spring.redis.port=6379

# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09

spring.redis.password=

RedisTemplate api

1、opsForValue 操作String闸英,Key锯岖,Value,包含過期key甫何,setBit位操作等

2出吹、opsForSet 操作set

3、opsForHash 操作hash

4辙喂、opsForZset 操作SortSet

5捶牢、opsForList 操作list隊列

6赃额、opsForHash 操作hash ?

7、opsForZset 操作SortSet ? opsForList 操作list隊列

RedisService

package com.xdclass.mobile.xdclassmobileredis;

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

import org.springframework.data.redis.core.*;

import org.springframework.stereotype.Service;

import java.io.Serializable;

import java.util.List;

import java.util.Set;

import java.util.concurrent.TimeUnit;

/**

* Created by Administrator on 2018/10/6.

*/

@Service

public class RedisService {

@Autowired

? ? private RedisTemplateredisTemplate;

? ? private static double size = Math.pow(2, 32);

? ? /**

* 寫入緩存

*

? ? * @param key

? ? * @param offset? 位 8Bit=1Byte

? ? * @return

? ? */

? ? public boolean setBit(String key, long offset, boolean isShow) {

boolean result =false;

? ? ? ? try {

ValueOperations operations =redisTemplate.opsForValue();

? ? ? ? ? ? operations.setBit(key, offset, isShow);

? ? ? ? ? ? result =true;

? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? }

return result;

? ? }

/**

* 寫入緩存

*

? ? * @param key

? ? * @param offset

? ? * @return

? ? */

? ? public boolean getBit(String key, long offset) {

boolean result =false;

? ? ? ? try {

ValueOperations operations =redisTemplate.opsForValue();

? ? ? ? ? ? result = operations.getBit(key, offset);

? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? }

return result;

? ? }

/**

* 寫入緩存

*

? ? * @param key

? ? * @param value

? ? * @return

? ? */

? ? public boolean set(final String key, Object value) {

boolean result =false;

? ? ? ? try {

ValueOperations operations =redisTemplate.opsForValue();

? ? ? ? ? ? operations.set(key, value);

? ? ? ? ? ? result =true;

? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? }

return result;

? ? }

/**

* 寫入緩存設置時效時間

*

? ? * @param key

? ? * @param value

? ? * @return

? ? */

? ? public boolean set(final String key, Object value, Long expireTime) {

boolean result =false;

? ? ? ? try {

ValueOperations operations =redisTemplate.opsForValue();

? ? ? ? ? ? operations.set(key, value);

? ? ? ? ? ? redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);

? ? ? ? ? ? result =true;

? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? }

return result;

? ? }

/**

* 批量刪除對應的value

*

? ? * @param keys

? ? */

? ? public void remove(final String... keys) {

for (String key : keys) {

remove(key);

? ? ? ? }

}

/**

* 刪除對應的value

*

? ? * @param key

? ? */

? ? public void remove(final String key) {

if (exists(key)) {

redisTemplate.delete(key);

? ? ? ? }

}

/**

* 判斷緩存中是否有對應的value

*

? ? * @param key

? ? * @return

? ? */

? ? public boolean exists(final String key) {

return redisTemplate.hasKey(key);

? ? }

/**

* 讀取緩存

*

? ? * @param key

? ? * @return

? ? */

? ? public Objectget(final String key) {

Object result =null;

? ? ? ? ValueOperations operations =redisTemplate.opsForValue();

? ? ? ? result = operations.get(key);

? ? ? ? return result;

? ? }

/**

* 哈希 添加

*

? ? * @param key

? ? * @param hashKey

? ? * @param value

? ? */

? ? public void hmSet(String key, Object hashKey, Object value) {

HashOperations hash =redisTemplate.opsForHash();

? ? ? ? hash.put(key, hashKey, value);

? ? }

/**

* 哈希獲取數(shù)據(jù)

*

? ? * @param key

? ? * @param hashKey

? ? * @return

? ? */

? ? public ObjecthmGet(String key, Object hashKey) {

HashOperations hash =redisTemplate.opsForHash();

? ? ? ? return hash.get(key, hashKey);

? ? }

/**

* 列表添加

*

? ? * @param k

? ? * @param v

? ? */

? ? public void lPush(String k, Object v) {

ListOperations list =redisTemplate.opsForList();

? ? ? ? list.rightPush(k, v);

? ? }

/**

* 列表獲取

*

? ? * @param k

? ? * @param l

? ? * @param l1

? ? * @return

? ? */

? ? public ListlRange(String k, long l, long l1) {

ListOperations list =redisTemplate.opsForList();

? ? ? ? return list.range(k, l, l1);

? ? }

/**

* 集合添加

*

? ? * @param key

? ? * @param value

? ? */

? ? public void add(String key, Object value) {

SetOperations set =redisTemplate.opsForSet();

? ? ? ? set.add(key, value);

? ? }

/**

* 集合獲取

*

? ? * @param key

? ? * @return

? ? */

? ? public SetsetMembers(String key) {

SetOperations set =redisTemplate.opsForSet();

? ? ? ? return set.members(key);

? ? }

/**

* 有序集合添加

*

? ? * @param key

? ? * @param value

? ? * @param scoure

? ? */

? ? public void zAdd(String key, Object value, double scoure) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? zset.add(key, value, scoure);

? ? }

/**

* 有序集合獲取

*

? ? * @param key

? ? * @param scoure

? ? * @param scoure1

? ? * @return

? ? */

? ? public SetrangeByScore(String key, double scoure, double scoure1) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? redisTemplate.opsForValue();

? ? ? ? return zset.rangeByScore(key, scoure, scoure1);

? ? }

//第一次加載的時候?qū)?shù)據(jù)加載到redis中

? ? public void saveDataToRedis(String name) {

double index = Math.abs(name.hashCode() %size);

? ? ? ? long indexLong =new Double(index).longValue();

? ? ? ? boolean availableUsers = setBit("availableUsers", indexLong, true);

? ? }

//第一次加載的時候?qū)?shù)據(jù)加載到redis中

? ? public boolean getDataToRedis(String name) {

double index = Math.abs(name.hashCode() %size);

? ? ? ? long indexLong =new Double(index).longValue();

? ? ? ? return getBit("availableUsers", indexLong);

? ? }

/**

* 有序集合獲取排名

*

? ? * @param key 集合名稱

? ? * @param value 值

*/

? ? public LongzRank(String key, Object value) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? return zset.rank(key,value);

? ? }

/**

* 有序集合獲取排名

*

? ? * @param key

? ? */

? ? public Set>zRankWithScore(String key, long start,long end) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? Set> ret = zset.rangeWithScores(key,start,end);

? ? ? ? return ret;

? ? }

/**

* 有序集合添加

*

? ? * @param key

? ? * @param value

? ? */

? ? public DoublezSetScore(String key, Object value) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? return zset.score(key,value);

? ? }

/**

* 有序集合添加分數(shù)

*

? ? * @param key

? ? * @param value

? ? * @param scoure

? ? */

? ? public void incrementScore(String key, Object value, double scoure) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? zset.incrementScore(key, value, scoure);

? ? }

/**

* 有序集合獲取排名

*

? ? * @param key

? ? */

? ? public Set>reverseZRankWithScore(String key, long start,long end) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? Set> ret = zset.reverseRangeByScoreWithScores(key,start,end);

? ? ? ? return ret;

? ? }

/**

* 有序集合獲取排名

*

? ? * @param key

? ? */

? ? public Set>reverseZRankWithRank(String key, long start, long end) {

ZSetOperations zset =redisTemplate.opsForZSet();

? ? ? ? Set> ret = zset.reverseRangeWithScores(key, start, end);

? ? ? ? return ret;

? ? }

}


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叫确,一起剝皮案震驚了整個濱河市跳芳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竹勉,老刑警劉巖飞盆,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異次乓,居然都是意外死亡吓歇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門票腰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來城看,“玉大人,你說我怎么就攤上這事杏慰〔饽” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵缘滥,是天一觀的道長轰胁。 經(jīng)常有香客問我,道長朝扼,這世上最難降的妖魔是什么赃阀? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮擎颖,結(jié)果婚禮上榛斯,老公的妹妹穿的比我還像新娘。我一直安慰自己搂捧,他們只是感情好驮俗,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著异旧,像睡著了一般意述。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吮蛹,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天荤崇,我揣著相機與錄音,去河邊找鬼潮针。 笑死术荤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的每篷。 我是一名探鬼主播瓣戚,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼端圈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了子库?” 一聲冷哼從身側(cè)響起舱权,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仑嗅,沒想到半個月后宴倍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡仓技,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年鸵贬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脖捻。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡阔逼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出地沮,到底是詐尸還是另有隱情嗜浮,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布诉濒,位于F島的核電站周伦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏未荒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一及志、第九天 我趴在偏房一處隱蔽的房頂上張望片排。 院中可真熱鬧,春花似錦速侈、人聲如沸率寡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冶共。三九已至,卻和暖如春每界,著一層夾襖步出監(jiān)牢的瞬間捅僵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工眨层, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庙楚,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓趴樱,卻偏偏與公主長得像馒闷,于是被迫代替她去往敵國和親酪捡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.引入依賴包(可能會出現(xiàn)版本問題 1.4后) 2.redis 配置 # Redis數(shù)據(jù)庫索引(默認為0)spri...
    阿__飛閱讀 456評論 0 0
  • 緩存是最直接有效提升系統(tǒng)性能的手段之一纳账。個人認為用好用對緩存是優(yōu)秀程序員的必備基本素質(zhì)逛薇。 本文結(jié)合實際開發(fā)經(jīng)驗,從...
    Java小生閱讀 797評論 1 3
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,446評論 0 13
  • // +-----------------------------------------------------...
    Robinbing閱讀 1,411評論 0 0
  • 01 是現(xiàn)在的時間太寶貴了疏虫?還是現(xiàn)在的人太聰明了永罚? 為什么見面問的第一句話就是“你有沒有男朋友”,聊了一次天就約你...
    tonight北方有佳人閱讀 839評論 3 6