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;
? ? }
}