SpringBoot基础架构篇3(Redis)

作者 : 开心源码 本文共2972个字,预计阅读时间需要8分钟 发布时间: 2022-05-13 共271人阅读

show me the code and talk to me,做的出来更要说的明白
我是布尔bl,你的支持是我分享的动力!

1 引入

数据库达到瓶颈,有什么处理方法。 Redis 可以很好处理这个问题。那让我们来学习如何在 SpringBoot 使用 Redis。

2 确保 redis 开启

安装步骤省略。。。具体可以参考网上教程。

2.1 测试

 telnet IP地址 端口(默认6379)

2.2 开启方法

假如上面方法没有返回,需要手动开启

  1. 找到 redis.conf 文件,配置允许访问的ip
find / -name redis.conf
  1. 打开 redis.conf
找到 bind 127.0.0.1改为 #bind 127.0.0.1找到 protected-mode yes 改为 protected-mode no(redis3.2版本以后)找到daemonize yes改为 daemonize no

3.保存退出

:wq

4 . 设置本地防火墙

假如有防火墙: iptables(Linux上常用的防火墙软件)

iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport  6379 -j ACCEPTservice iptables save #保存iptables规则

5 . 阿里云云主机

假如redis放在了阿里云,需要增加安全组规则,自行百度

  1. 最后测试
 telnet IP地址 端口(默认6379)

成功得到返回

3 redis 作用

我们知道 redis 可以辅助 mysql,那我们应该怎么使用这个辅助呢?我这里说的是常见的情况。当我们的数据库达到瓶颈了,这个是前提。同时是读多于写的情况,我们即可以使用 redis 了。

如今前后台交互通过 JSON 交流。基于这点,我们一般把数据转成 json ,而后再转成字符的数据格式存在 redis 里面。这里 json 是不能直接存在 redis 里面的。 由于 redis 没有 json 的数据结构。

当我们取出数据的时候,数据是一堆 json 的字符串,因而我们需要将数据转成对象,而后通 过springboot 转成 json 。

4 redis常用命令

redis 有五种数据结构

  • String 字符串
  • List 集合
  • Set 集合
  • Hash 集合
  • SortedSet 集合

常见的 String 字符串使用(增查改删)

set a 'a' get aset a 'b'del a

4 搭建环境

4.1 项目结构

├─java│  └─com│      └─example│          └─lsbredistest│              └─controller│                  └─entity└─resources    ├─static    └─templates

4.2 application.yml

首先我们需要配置 redis 连接的客户名密码

### redis 缓存配置spring:  redis:    database: 0    host: ip    port: 6379    password: 123456

4.3 RedisController

核心代码

@RestController@RequestMapping("/lsbredis")public class RedisController {    @Resource    private StringRedisTemplate stringRedisTemplate;    @RequestMapping("/test")    public void test(){        // key : a value: a        // 增        stringRedisTemplate.opsForValue().set("a","a");        // 查        String a = stringRedisTemplate.opsForValue().get("a");        System.out.println("a的值:"+a);        // 改        stringRedisTemplate.opsForValue().set("a","b");        // 缓存一个对象        List<User> list = new ArrayList<>();        list.add(new User(1l, "c1",1, "s1"));        list.add(new User(2l, "c2",2, "s2"));        list.add(new User(3l, "c3",3, "s3"));        Gson gson = new Gson();        String toJson = gson.toJson(list);        stringRedisTemplate.opsForValue().set("user",toJson);    }}

注入配置

不知有没有发现我们没有配置 redis 的注入。到底 redis 的如何自动注入的?通过查找代码,我们可以发现 redis 已经通过 Springboot 自己在内部设置了。

@Configuration(proxyBeanMethods = false)@ConditionalOnClass(RedisOperations.class)@EnableConfigurationProperties(RedisProperties.class)@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })public class RedisAutoConfiguration {    @Bean    @ConditionalOnMissingBean(name = "redisTemplate")    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)            throws UnknownHostException {        RedisTemplate<Object, Object> template = new RedisTemplate<>();        template.setConnectionFactory(redisConnectionFactory);        return template;    }    @Bean    @ConditionalOnMissingBean    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)            throws UnknownHostException {        StringRedisTemplate template = new StringRedisTemplate();        template.setConnectionFactory(redisConnectionFactory);        return template;    }}

上面的代码就是 Redis 的注入配置。省去了我们再去编写代码。赞!

5 源码

buerbl/learnSpringboot/tree/master/lsb-redistest

6 深入一层

redis 缓存可以减轻数据库压力,有什么方法可以减轻 redis 压力呢?

答案是当然有。我们可以使用 Guava做本地缓存,减轻 redis 压力,同时加快反问速度。

当然加本地缓存也情况。单机环境下,加本地缓存比较简单,但是分布式环境下,加本地缓存,当我们的缓存升级的时候,我们需要额外解决其余机器的本地缓存,不然数据就一致了。我们利用 redis的pub/sub 机制,对其余机器的本地缓存进行删除。

关注微信公众号,随时手机端阅读

公众号.jpg

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » SpringBoot基础架构篇3(Redis)

发表回复