SpringBoot 集成 Redis

问:为什么使用 Redis?
答:因为 高性能大并发
如果在大并发的情况下,所有的请求都直接打到数据库上,那么再好的数据库也扛不住疯狂打击。

1、maven

<!--集成redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2、配置参数

@Data
@Component
public class MSysPropertyBean {

    //是否使用redis
    @Value("${app.module.sys.redis.useRedis:true}")
    private boolean useRedis;

    //redis服务器地址
    @Value("${app.module.sys.redis.hostName:127.0.0.1}")
    private String redisHostName;

    //redis服务器端口号
    @Value("${app.module.sys.redis.port:6379}")
    private int redisPort;

    //redis连接密码
    @Value("${app.module.sys.redis.password:123456}")
    private String redisPassword;

    //redis使用的数据库
    @Value("${app.module.sys.redis.database:0}")
    private int redisDatabase;

    //redis 连接池MaxIdle
    @Value("${app.module.sys.redis.maxIdle:9}")
    private int redisMaxIdle;

    //redis 连接池MinIdle
    @Value("${app.module.sys.redis.minIdle:0}")
    private int redisMinIdle;

    //redis 连接池最大活跃数
    @Value("${app.module.sys.redis.maxActive:8}")
    private int redisMaxActive;

    //redis 连接最大等待时间
    @Value("${app.module.sys.redis.maxWait:-1}")
    private int redisMaxWait;

}

3、配置类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
public class RedisConfiguration {

    @Autowired
    private MSysPropertyBean sysPropertyBean;

    /**
     * 注入JedisPoolConfig实例
     * 工厂的池配置
     * 
     * @return
     */
    @Bean
    public JedisPoolConfig poolConfig() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // 最大空闲数
        poolConfig.setMaxIdle(sysPropertyBean.getRedisMaxIdle());
        // 最小空闲数
        poolConfig.setMinIdle(sysPropertyBean.getRedisMinIdle());
        // 连接池的最大数据库连接数
        poolConfig.setMaxTotal(sysPropertyBean.getRedisMaxTotal());
        // 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
        poolConfig.setMaxWaitMillis(sysPropertyBean.getRedisMaxWait());
        return poolConfig;
    }


    /**
     * 注入RedisConnectionFactory实例
     * 连接工厂配置类
     * 
     * @param jedisPoolConfig
     * @return
     */
    @Bean
    public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        // 设置连接参数
        jedisConnectionFactory.setHostName(sysPropertyBean.getRedisHostName());
        jedisConnectionFactory.setPort(sysPropertyBean.getRedisPort());
        jedisConnectionFactory.setPassword(sysPropertyBean.getRedisPassword());
        // 设置此工厂的池配置
        jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
        return jedisConnectionFactory;
    }


    /**
     * 注入StringRedisTemplate实例
     * 
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
       if (!sysPropertyBean.isUseRedis()) {
            return null;
        }
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
        return stringRedisTemplate;
    }


}

4、测试类

@Component
public class RedisTest {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @PostConstruct
    public void init(){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        stringRedisTemplate.opsForValue().set("test", df.format(new Date()),60*3, TimeUnit.SECONDS); // 保存数据,并只存在3分钟
    }
}

5、验证
在这里插入图片描述

6、五大数据类型

	/**
	 * string
	 * 实现:分布式锁
	 * 特点:简单、方便
	 */
	stringRedisTemplate.opsForValue();
	
	
	/**
	 * hash
	 * 实现:购物车
	 * 特点:key-value 结构,可操作指定key
	 */
	stringRedisTemplate.opsForHash();
	
	
	/**
	 * list(双向循环链表)
	 * 实现:简单消息队列
	 * 特点:先后顺序、两端操作
	 */
	stringRedisTemplate.opsForList();
	
	
	/**
	 * set
	 * 实现:过滤器
	 * 特点:自动去重、随机
	 */
	stringRedisTemplate.opsForSet();
	
	/**
	 * zset
	 * 实现:排行榜
	 * 特点:自动去重、自定义权重排序
	 */
	stringRedisTemplate.opsForZSet();

7、常用操作

//向redis里存入数据并设置设置缓存时间
stringRedisTemplate.opsForValue().set("test", "我是测试数据",60*10, TimeUnit.SECONDS);

//根据key获取过期时间
stringRedisTemplate.getExpire("test");

//设置过期时间
stringRedisTemplate.expire("test",1000 , TimeUnit.MILLISECONDS);

//根据key获取过期时间并换算成指定单位 
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS);

//根据key获取缓存中的val
stringRedisTemplate.opsForValue().get("test");

//根据key删除缓存
stringRedisTemplate.delete("test");

//检查key是否存在,返回boolean值 
stringRedisTemplate.hasKey("test");

Redis 分布式锁

Redis 购物车

Redis 消息队列

Redis 过滤器

Redis 排行榜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值