Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种数据类型,如Strings,hashs,lists,sets,sorted sets,bitmaps,hyperloglogs等。
Redis 提供内置复制,Lua脚本,Lua回收,事务已经不同级别的磁盘持久化功能,同时通过Redis Sentinel哨兵来提供高可用,以及集群的自动分区。
更多关于Redis 的知识可以参看以下网站:
Redis官网,Redis中文社区
同之前对mongodb的良好支持一样,spring-boot工程中只需增加如下依赖,就可以很好的使用redis
org.springframework.boot
spring-boot-starter-data-redis
也和mongodb一样,如果redis启动时使用的是默认配置,即port=6379,则无需对项目的配置进行修改。
如果需要修改配置信息,则在application.properties文件中找到对应的配置进行修改即可,如下所示。
增加如下代码,首先是redis的使用
package com.redis;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.fastjson.JSON;
import com.mail.MailMsg;
import org.apache.commons.lang.NullArgumentException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class MailMsgRedis {
public static final String MAIL_MASG_KEY = "mail:msg:to:%s";
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void setMsg(MailMsg msg) {
if (msg == null)
throw new NullArgumentException("MailMsg is null.");
String key = String.format(MAIL_MASG_KEY, msg.getTo());
stringRedisTemplate.opsForValue().set(key, JSON.toJSONString(msg));
}
public MailMsg getMsgByTo(String to) {
if (StringUtils.isEmpty(to))
throw new NullArgumentException("to is null.");
String key = String.format(MAIL_MASG_KEY, to);
String result = stringRedisTemplate.opsForValue().get(key);
if (StringUtils.isEmpty(result))
return null;
return JSON.parseObject(stringRedisTemplate.opsForValue().get(key), MailMsg.class);
}
}
其中StringRedisTemplate里面包含对各数据结构的操作,如下图所示。
关于StringRedisTemplate更多的信息可以看其源码。
对之前发送邮件的代码稍作修改
@Autowired
private MailMsgRedis mailMsgRedis;
public void sendSimpleEmail(MailMsg mailMsg)
{
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom(env.getProperty(MailPropKey.EMAIL_FROM));
msg.setTo(mailMsg.getTo());
msg.setSubject(mailMsg.getSubject());
msg.setText(mailMsg.getText());
javaMailSender.send(msg);
mailMsgRepository.insert(mailMsg);
mailMsgRedis.setMsg(mailMsg);
}
public MailMsg findByToFromRedis(String to) {
return mailMsgRedis.getMsgByTo(to);
}
在controller中增加从redis获取信息的方法
@RequestMapping("/find/redis/to")
public String findMailByToFromRedis(HttpServletRequest request, String to) {
MailMsg msg = mailHelper.findByToFromRedis(to);
if (msg == null)
return "not found by to " + to;
return "redis: " + JSON.toJSONString(msg);
}
准备工作都已就绪,启动程序。
在浏览器中输入http://localhost:8080/mail,发送一封测试邮件,发送成功后可以在redis中看到如下信息
然后在浏览器中输入http://localhost:8080/find/redis/[email protected],可以看到页面会显示如下内容
redis: {"id":"586b81cfea092207cdfd18af","subject":"Test mongodb","text":"nothing need to care.","to":"[email protected]"}