随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

SpringBoot集成redis

一、概述

  redis是一个开源免费的高性能内存数据库。其可做本地缓存也可做分布式缓存。

  今天主要介绍下ubuntu服务器安装redis,安装好后和SpringBoot做集成测试。

二、示例

  ps:如果是买的商业服务器,记得把对应的端口打开,不然远程无法连接。

  1.安装步骤    

第一步:执行命令
sudo apt update
第二步:执行命令
sudo apt-get install redis-server
第三步:打开以下文件设置密码
sudo vim /etc/redis/redis.conf

 找到:requirepass 设置你的密码 。 

 示例:requirepass 123456

第四步:允许redis远程访问,搜索redis.conf文件找到下面这句话,并注释掉(因为redis默认本机访问)
#注释bind
#bind 127.0.0.1
第五步:启动、关闭、重启命令
sudo service /etc/init.d/redis-server start     #启动
sudo service /etc/init.d/redis-server stop      #关闭
sudo service /etc/init.d/redis-server restart   #重启

 根据以上命令启动就行了。可以安装一个redis客户端进行测试,如果连接上测试图如下

 

  2.和SpringBoot集成测试

第一步:在项目中依赖redis 
 <!--        集成redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
复制代码
第二步:在application.yml中配置redis
  redis: #在ubuntu上启动service使用 sudo service  /etc/init.d/redis-server start
    host: 你的主机地址
    port: redis端口号
    database: 0
    timeout: 1800000 #超时时间
    password: redis密码
    lettuce:
      pool:
        #最大阻塞等待时间 ,负数表示没有限制
        max-wait: -1
        #连接池最大空闲连接
        max-idle: 8
        #连接池中最小空闲连接
        min-idle: 0
        #连接池最大连接数,负数表示没有限制
        max-active: 50
复制代码
复制代码
第三步:配置RedisConfig类
@Configuration//配置类
public class RedisConfig {
    /**
     * redisTemplate相关配置
     *
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //配置连接工厂
        redisTemplate.setConnectionFactory(factory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper om = new ObjectMapper();
        //指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);

        // 值采用json序列化
        redisTemplate.setValueSerializer(jacksonSeial);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        // 设置hash key 和value序列化模式
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jacksonSeial);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }


}
复制代码
复制代码
第四步:编写Redis工具(这里只测试简单的key-value)
@Component
public class RedisUtil<T> {
    @Autowired
    RedisTemplate<String, T> redisTemplate;

    /**
     * 根据key获取 redis缓存中的值
     *
     * @param key key
     * @return
     */
    public T getValue(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 向redis中设置值
     *
     * @param key
     * @param value
     */
    public void setValue(String key, T value) {
        redisTemplate.opsForValue().set(key, value);
    }


}
复制代码
复制代码
第五步:使用Redis工具
@Slf4j
@Service
public class VideoBannerServiceImpl implements IVideoBannerService {
    @Autowired
    VideoBannerMapper videoBannerMapper;
    @Autowired
    RedisUtil<List<VideoBanner>> redisUtil;

    @Override
    public ResultOk getBanners() {
        String key = "video_banner_list";
        List<VideoBanner> banners = redisUtil.getValue(key);
        if (banners == null || banners.isEmpty()) {
            banners = videoBannerMapper.getBanners();
            redisUtil.setValue(key, banners);
            log.info("获取banner列表并执行了数据库操作");
        }
        return ResultOk.ok(200, "查询所有的banner图", banners);
    }
}
复制代码
复制代码
第六步:测试,多点几次这个接口,会发现只有第一次执行了数据库查询操作,其他的点击,都走的是redis缓存

 

复制代码
复制代码
第七步:看看redis缓存长啥样

 

复制代码

  好了,写完收工

  

posted on   飘杨......  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示