SpringBoot集成redisTemplate操作redis
依赖
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
配置文件
application.yml
spring:
redis:
host: 127.0.0.1
port: 6379
database: 0
password: qweasdzxc
timeout: 30000
jedis:
pool:
max-active: 8
max-wait: 8
min-idle: 0
max-idle: 12
配置类
RedisConfig.class
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-wait}")
private int maxWait;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.database}")
private int database;
@Bean
@Primary
public JedisConnectionFactory redisConnectionFactory() {
// 初始化连接工厂
RedisStandaloneConfiguration redisConfiguration = new RedisStandaloneConfiguration(host, port);
redisConfiguration.setPassword(RedisPassword.of(password));
redisConfiguration.setDatabase(database);
JedisClientConfiguration build = JedisClientConfiguration.builder().connectTimeout(Duration.ofMillis(timeout)).build();//设置连接超时时间
JedisConnectionFactory factory = new JedisConnectionFactory(redisConfiguration, build);
factory.getPoolConfig().setMaxIdle(maxIdle);
factory.getPoolConfig().setMinIdle(minIdle);
factory.getPoolConfig().setMaxTotal(maxActive);
factory.getPoolConfig().setMaxWaitMillis(maxWait);
return factory;
}
@Bean
@Primary
public RedisTemplate<String, String> getRedisTemplate(RedisConnectionFactory jedisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate(jedisConnectionFactory);
setSerializer(template);
template.afterPropertiesSet();
return template;
}
//设置序列化工具
private void setSerializer(StringRedisTemplate template) {
FastJsonRedisSerializer<Object> objectFastJsonRedisSerializer = new FastJsonRedisSerializer<Object>(Object.class);
FastJsonConfig fastJsonConfig = objectFastJsonRedisSerializer.getFastJsonConfig();
fastJsonConfig.setCharset(StandardCharsets.UTF_8);
fastJsonConfig.setSerializerFeatures();
template.setValueSerializer(objectFastJsonRedisSerializer);
}
}
调用类
RedisService.class
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public String getStringByKey(String key) {
return redisTemplate.opsForValue().get(key);
}
public void setKey(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public void setKeyWithExpire(String key, String value, Long expireTime, TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key, value, expireTime, timeUnit);
}
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
}
public void removePattern(final String pattern) {
Set<String> keys = redisTemplate.keys(pattern);
if ((keys != null ? keys.size() : 0) > 0) {
redisTemplate.delete(keys);
}
}
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
}
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
}
public void lPush(String k, String v) {
Long aLong = redisTemplate.opsForList().leftPush(k, v);
}
public void setAdd(String key, String value) {
SetOperations<String, String> set = redisTemplate.opsForSet();
set.add(key, value);
}
public void zAdd(String key,String value,double scoure){
ZSetOperations<String, String> zset = redisTemplate.opsForZSet();
zset.add(key,value,scoure);
}
public Set<String> rangeByScore(String key,double min,double max){
ZSetOperations<String, String> zset = redisTemplate.opsForZSet();
return zset.rangeByScore(key, min, max);
}
}
测试类
RedisServiceTest.class
import org.junit.Ignore;
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.test.context.junit4.SpringRunner;
import org.springframework.util.Assert;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisServiceTest {
@Autowired
private RedisService redisService;
@Test
public void setKey() {
redisService.setKey("hello", "你好呀");
}
@Test
public void getStringByKey() {
String aaaaa = redisService.getStringByKey("new:key");
Assert.hasText(aaaaa, "查询redis key new:key为空");
}
@Test
public void setKeyWithExpire() {
redisService.setKeyWithExpire("expire:key", "hello world", 10000L, TimeUnit.MILLISECONDS);
String stringByKey = redisService.getStringByKey("expire:key");
Assert.hasText(stringByKey, "查询redis key expire:key为空");
}
@Test
@Ignore
public void remove() {
redisService.remove("expire:key");
}
@Test
@Ignore
public void exists() {
boolean exists = redisService.exists("new:key");
Assert.isTrue(exists, "人家不在");
}
@Test
public void removePattern() {
redisService.removePattern("new*");
}
@Test
public void lPush() {
redisService.lPush("new:list", "aaaa");
}
@Test
public void setAdd() {
redisService.setAdd("new:set", "ohhhhhhh");
}
@Test
public void zAdd() {
redisService.zAdd("new:zset", "啊啊啊", 1.0);
redisService.zAdd("new:zset", "不不不", 3.0);
redisService.zAdd("new:zset", "充充充", 4.0);
redisService.zAdd("new:zset", "滴滴滴", 5.0);
}
@Test
@Ignore
public void rangeByScore() {
Set<String> strings = redisService.rangeByScore("new:zset", 4.1, 5.1);
Assert.notEmpty(strings, "zset范围查询出现错误");
}
}
Jedis操作redis
依赖
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
配置文件
application.yml
spring:
redis:
host: 127.0.0.1
port: 6379
database: 0
password: qweasdzxc
timeout: 30000
jedis:
pool:
max-active: 8
max-wait: 8
min-idle: 0
max-idle: 12
配置类
RedisConfig.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-wait}")
private int maxWait;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.database}")
private int database;
@Bean
public JedisPool redisPoolFactory(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWait);
jedisPoolConfig.setMaxTotal(maxActive);
jedisPoolConfig.setMinIdle(minIdle);
return new JedisPool(jedisPoolConfig,host,port,timeout,password,database);
}
}
调用工具类
JedisService.class
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Service
public class JedisService {
@Autowired
private JedisPool JedisPool;
public Jedis getJedis() {
try (Jedis resource = JedisPool.getResource()) {
return resource;
}
}
public String getStringByKey(String key) {
String s = getJedis().get(key);
return s;
}
public void setStringWithKey(String k, String v) {
getJedis().set(k, v);
}
public void setKeyWithExpire(String key, String value, Long expireTime, TimeUnit timeUnit) {
long l = timeUnit.toMillis(expireTime);
Jedis jedis = getJedis();
String set = jedis.set(key, value);
jedis.pexpire(key, l);
}
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
}
public void removePattern(final String pattern) {
Jedis jedis = getJedis();
Set<String> keys = jedis.keys(pattern);
String[] strings = new String[10];
String[] keyS = keys.toArray(strings);
if ((keys != null ? keys.size() : 0) > 0) {
jedis.del(keyS);
}
}
public void remove(final String key) {
if (exists(key)) {
getJedis().del(key);
}
}
public boolean exists(final String key) {
return getJedis().exists(key);
}
public void lPush(String k, String v) {
Long aLong = getJedis().lpush(k, v);
}
public void setAdd(String key, String value) {
getJedis().sadd(key, value);
}
public void zAdd(String key, String value, double scoure) {
getJedis().zadd(key, scoure, value);
}
public Set<String> rangeByScore(String key, double min, double max) {
return getJedis().zrangeByScore(key, min, max);
}
测试类
JedisTest.class
import com.lee.boot.redis.jedis.service.JedisService;
import org.junit.Ignore;
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.test.context.junit4.SpringRunner;
import org.springframework.util.Assert;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SpringBootTest
@RunWith(SpringRunner.class)
public class JedisTest {
@Autowired
JedisService jedisService;
@Test
public void setStringKey() {
for (int i = 0; i < 10; i++) {
jedisService.setStringWithKey("a" + i, "b" + i);
}
}
@Test
public void setKey() {
jedisService.setStringWithKey("jedis", "你好呀");
}
@Test
public void getStringByKey() {
String aaaaa = jedisService.getStringByKey("new:key");
Assert.hasText(aaaaa, "查询redis key new:key为空");
}
@Test
public void setKeyWithExpire() {
jedisService.setKeyWithExpire("expire:key", "hello world", 10000L, TimeUnit.MILLISECONDS);
String stringByKey = jedisService.getStringByKey("expire:key");
Assert.hasText(stringByKey, "查询redis key expire:key为空");
}
@Test
@Ignore
public void remove() {
jedisService.remove("expire:key");
}
@Test
@Ignore
public void exists() {
boolean exists = jedisService.exists("new:key");
Assert.isTrue(exists, "人家不在");
}
@Test
public void removePattern() {
jedisService.removePattern("new*");
}
@Test
public void lPush() {
jedisService.lPush("new:list", "aaaa");
}
@Test
public void setAdd() {
jedisService.setAdd("new:set", "ohhhhhhh");
}
@Test
public void zAdd() {
jedisService.zAdd("new:zset", "啊啊啊", 1.0);
jedisService.zAdd("new:zset", "不不不", 3.0);
jedisService.zAdd("new:zset", "充充充", 4.0);
jedisService.zAdd("new:zset", "滴滴滴", 5.0);
}
@Test
@Ignore
public void rangeByScore() {
Set<String> strings = jedisService.rangeByScore("new:zset", 4.1, 5.1);
Assert.notEmpty(strings, "zset范围查询出现错误");
}
}