Redis简介

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种数据类型,如Strings,hashs,lists,sets,sorted sets,bitmaps,hyperloglogs等。

Redis 提供内置复制,Lua脚本,Lua回收,事务已经不同级别的磁盘持久化功能,同时通过Redis Sentinel哨兵来提供高可用,以及集群的自动分区。

更多关于Redis 的知识可以参看以下网站:

Redis官网Redis中文社区

Spring-boot Redis

POM依赖

同之前对mongodb的良好支持一样,spring-boot工程中只需增加如下依赖,就可以很好的使用redis

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
也和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/to?to=xxx@xx.com,可以看到页面会显示如下内容

redis: {"id":"586b81cfea092207cdfd18af","subject":"Test mongodb","text":"nothing need to care.","to":"xxx@xx.com"}


GitHub 加速计划 / sp / spring-boot
73.97 K
40.4 K
下载
spring-projects/spring-boot: 是一个用于简化Spring应用开发的框架。适合用于需要快速开发企业级Java应用的项目。特点是可以提供自动配置、独立运行和内置的Tomcat服务器,简化Spring应用的构建和部署。
最近提交(Master分支:2 个月前 )
fdf24c6c Closes gh-42976 12 天前
3c42ba8c * pr/42974: Fix copyright year of updated file Polish Closes gh-42974 12 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐