1.pom.xml
<!-- 集成redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
# Redis 数据库索引(默认为 0)
spring.redis.database=0
# Redis 服务器地址
spring.redis.host=localhost
# Redis 服务器连接端口
spring.redis.port=6379
# Redis 服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0
2.redis配置全局属性
package com.example.spdemo.config;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.lang.reflect.Method;
/**
* redis配置全局属性
*/
@Configuration
@EnableCaching //来开启缓存
public class RedisConfig extends CachingConfigurerSupport {
/**
* 配置主键的生产策略 KeyGenerator,如不配置会默认使用参数名作为主键
* @return
*/
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
}
3.编写测试类
package com.example.spdemo;
import com.example.spdemo.model.User;
import com.example.spdemo.service.RedisService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRedisTemplate {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private RedisService redisService;
/**
* 存字符串String
*/
@Test
public void testString1() {
redisTemplate.opsForValue().set("neo", "ityouknow");
Assert.assertEquals("ityouknow", redisTemplate.opsForValue().get("neo"));
}
/**
* 存对象
*/
@Test
public void testObj(){
User user=new User( "smile", 18, "know");
ValueOperations<String, User> operations=redisTemplate.opsForValue();
operations.set("com.neo", user);
User u=operations.get("com.neo");
System.out.println("user: "+u.toString());
}
/**
* 设置失效时间
* @throws InterruptedException
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
*/
@Test
public void testExpire() throws InterruptedException {
User user=new User( "expire", 22, "expire",new Date());
ValueOperations<String, User> operations=redisTemplate.opsForValue();
operations.set("expire", user,100, TimeUnit.MILLISECONDS);
Thread.sleep(1000);
boolean exists=redisTemplate.hasKey("expire");
if(exists){
System.out.println("exists is true");
}else{
System.out.println("exists is false");
}
}
/**
* 删除
*/
@Test
public void testDelete(){
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("deletekey", "ityouknow");
redisTemplate.delete("deletekey");
boolean exists=redisTemplate.hasKey("deletekey");
if(exists){
System.out.println("exists is true");
}else{
System.out.println("exists is false");
}
}
/**
* 存hash
*/
@Test
public void testHash() {
HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
hash.put("hash","you","you");
String value=(String) hash.get("hash","you");
System.out.println("hash value :"+value);
}
/**
* 存list
*/
@Test
public void testList() {
ListOperations<String, String> list = redisTemplate.opsForList();
list.leftPush("list","it");
list.leftPush("list","you");
list.leftPush("list","know");
String value=(String)list.leftPop("list");
System.out.println("list value :"+value.toString());
}
/**
* 存set
*/
@Test
public void testSet() {
String key="set";
SetOperations<String, String> set = redisTemplate.opsForSet();
set.add(key,"it");
set.add(key,"you");
set.add(key,"you");
set.add(key,"know");
Set<String> values=set.members(key);
for (String v:values){
System.out.println("set value :"+v);
}
}
/**
* 存zset
*/
@Test
public void testZset(){
String key="zset";
redisTemplate.delete(key);
ZSetOperations<String, String> zset = redisTemplate.opsForZSet();
zset.add(key,"it",1);
zset.add(key,"you",6);
zset.add(key,"know",4);
zset.add(key,"neo",3);
Set<String> zsets=zset.range(key,0,3);
for (String v:zsets){
System.out.println("zset value :"+v);
}
Set<String> zsetB=zset.rangeByScore(key,0,3);
for (String v:zsetB){
System.out.println("zsetB value :"+v);
}
}
/**
* 测试封装类
* @throws Exception
*/
@Test
public void testString() throws Exception {
redisService.set("neo", "ityouknow");
Assert.assertEquals("ityouknow", redisService.get("neo"));
}
}
4.封装redis
package com.example.spdemo.service;
import com.example.spdemo.controller.UploadController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.util.Set;
/**
* 封装redis
*/
@Service
public class RedisService {
private static Logger logger = LoggerFactory.getLogger(RedisService.class);
@Autowired
private RedisTemplate redisTemplate;
/**
* 简单的插入操作
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value) {
boolean result = false;
try {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
operations.set(key, value);
result = true;
} catch (Exception e) {
logger.error("set error: key {}, value {}",key,value,e);
}
return result;
}
/**
* 获取key对应的值
* @param pattern
* @return
*/
public Object get(String pattern){
Set<Serializable> keys = redisTemplate.keys(pattern);
if (keys.size() > 0){
return redisTemplate.opsForValue().get(pattern);
}
return "no this "+pattern;
}
/**
* 删除某一类的 Key 的值
* @param pattern
*/
public void removePattern(final String pattern) {
Set<Serializable> keys = redisTemplate.keys(pattern);
if (keys.size() > 0)
redisTemplate.delete(keys);
}
}