show me the code and talk to me,作的出来更要说的明白
我是布尔bl,你的支持是我分享的动力!java
数据库达到瓶颈,有什么解决方法。 Redis 能够很好解决这个问题。那让咱们来学习如何在 SpringBoot 使用 Redis。mysql
安装步骤省略。。。具体能够参考网上教程。git
telnet IP地址 端口(默认6379)
复制代码
若是上面方法没有返回,须要手动开启github
find / -name 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.保存退出redis
:wq
复制代码
4 . 设置本地防火墙spring
若是有防火墙: iptables(Linux上经常使用的防火墙软件)sql
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
service iptables save #保存iptables规则
复制代码
5 . 阿里云云主机数据库
若是redis放在了阿里云,须要添加安全组规则,自行百度json
telnet IP地址 端口(默认6379)
复制代码
成功获得返回后端
咱们知道 redis 能够辅助 mysql,那咱们应该怎样使用这个辅助呢?我这里说的是常见的状况。当咱们的数据库达到瓶颈了,这个是前提。同时是读多于写的状况,咱们就可使用 redis 了。
现在先后端交互经过 JSON 交流。基于这点,咱们通常把数据转成 json ,而后再转成字符的数据格式存在 redis 里面。这里 json 是不能直接存在 redis 里面的。 由于 redis 没有 json 的数据结构。
当咱们取出数据的时候,数据是一堆 json 的字符串,所以咱们须要将数据转成对象,而后通 过springboot 转成 json 。
redis 有五种数据结构
常见的 String 字符串使用(增查改删)
set a 'a'
get a
set a 'b'
del a
复制代码
4 搭建环境
├─java
│ └─com
│ └─example
│ └─lsbredistest
│ └─controller
│ └─entity
└─resources
├─static
└─templates
复制代码
首先咱们须要配置 redis 链接的用户名密码
### redis 缓存配置
spring:
redis:
database: 0
host: ip
port: 6379
password: 123456
复制代码
核心代码
@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 的注入配置。省去了咱们再去编写代码。赞!
redis 缓存能够减轻数据库压力,有什么方法能够减轻 redis 压力呢?
答案是固然有。咱们可使用 Guava作本地缓存,减轻 redis 压力,同时加快反问速度。
固然加本地缓存也状况。单机环境下,加本地缓存比较简单,可是分布式环境下,加本地缓存,当咱们的缓存更新的时候,咱们须要额外处理其余机器的本地缓存,否则数据就一致了。咱们利用 redis的pub/sub 机制,对其余机器的本地缓存进行删除。