Springboot整合Redis

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范围查询出现错误");
    }

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355