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 ACCEPT

service 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 a
set 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 源码

https://github.com/buerbl/learnSpringboot/tree/master/lsb-redistest

6 深入一层

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

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

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

关注微信公众号,随时移动端阅读

)

最新文章

  1. CSS笔记
  2. VRML开发环境配置
  3. PHP MYSQL单向同步方案
  4. CoinPunk项目介绍
  5. 面试知识点总结之Java语言
  6. [C++] socket -7 [邮槽]
  7. [Android Pro] Android签名与认证详细分析之二(CERT.RSA剖析)
  8. PHP开发调优clockwork工具
  9. ios8中百度推送接收不到
  10. sql中count(*)、count(col)、count(1)区别
  11. proxy.go 源码阅读
  12. .net 上传文件 Failed to load resource: net::ERR_CONNECTION_RESET Bug 解决
  13. yii DbCriteria相关属性常用方法
  14. 困在栅栏里的恺撒WriteUp(附栅栏密码加密解密脚本)
  15. ES6 扩展运算符 三个点(...)
  16. Oracle入门《Oracle介绍》第一章1-2 Oracle 实例
  17. python opencv show图片,debug技巧
  18. wkhtmlpdf安装以及中文乱码
  19. 初步认识 LESS,我要开始学习LESS啦!
  20. VM CentOS7 网络配置问题汇总

热门文章

  1. Python--day67--CBV和FBV、Request对象及上传文件示例
  2. 浅谈集合框架三、Map常用方法及常用工具类
  3. asp dotnet core 图片在浏览器没访问可能原因
  4. visual studio 2010问题修复
  5. 2019牛客暑期多校训练营(第二场)F.Partition problem
  6. H3C进入目录---用户视图
  7. thinkjs解决跨域
  8. Linux 内核PC/104 和 PC/104+
  9. CSS3 属性学习
  10. 2018-8-10-win10-uwp-Window.Current.Dispatcher中Current为null