将Redis集成到您的Spring项目中

本文展示了如何通过注释配置将Redis缓存集成到您的spring项目中。

我们将从Gradle配置开始。 我们将使用jedis驱动程序。

group 'com.gkatzioura.spring'
version '1.0-SNAPSHOT'apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'buildscript {repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE")}
}jar {baseName = 'gs-serving-web-content'version =  '0.1.0'
}sourceCompatibility = 1.8repositories {mavenCentral()
}dependencies {compile "org.springframework.boot:spring-boot-starter-thymeleaf"compile 'org.slf4j:slf4j-api:1.6.6'compile 'ch.qos.logback:logback-classic:1.0.13'compile 'redis.clients:jedis:2.7.0'compile 'org.springframework.data:spring-data-redis:1.5.0.RELEASE'testCompile group: 'junit', name: 'junit', version: '4.11'
}task wrapper(type: Wrapper) {gradleVersion = '2.3'
}

将使用spring注释进行Redis配置。

package com.gkatzioura.spring.config;import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic JedisConnectionFactory redisConnectionFactory() {JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();jedisConnectionFactory.setUsePool(true);return jedisConnectionFactory;}@Beanpublic RedisSerializer redisStringSerializer() {StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();return stringRedisSerializer;}@Bean(name="redisTemplate")public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf,RedisSerializer redisSerializer) {RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();redisTemplate.setConnectionFactory(cf);redisTemplate.setDefaultSerializer(redisSerializer);return redisTemplate;}@Beanpublic CacheManager cacheManager() {return new RedisCacheManager(redisTemplate(redisConnectionFactory(),redisStringSerializer()));}}

下一步是创建我们的缓存界面

package com.gkatzioura.spring.cache;import java.util.Date;
import java.util.List;public interface CacheService {public void addMessage(String user,String message);public List<String> listMessages(String user);}

用户将添加消息,他将能够检索它们。 但是,在我们的实施中,与用户相关的消息将保留一分钟的时间。

我们使用Redis的CacheService实现如下。

package com.gkatzioura.spring.cache.impl;import com.gkatzioura.spring.cache.CacheService;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.List;@Service("cacheService")
public class RedisService implements CacheService {@Resource(name = "redisTemplate")private ListOperations<String, String> messageList;@Resource(name = "redisTemplate")private RedisOperations<String,String> latestMessageExpiration;@Overridepublic void addMessage(String user,String message) {messageList.leftPush(user,message);ZonedDateTime zonedDateTime = ZonedDateTime.now();Date date = Date.from(zonedDateTime.plus(1, ChronoUnit.MINUTES).toInstant());latestMessageExpiration.expireAt(user,date);}@Overridepublic List<String> listMessages(String user) {return messageList.range(user,0,-1);}}

我们的缓存机制将保留每个用户发送的消息列表。 为此,我们将使用用户作为键来设置ListOperations接口。 RedisOperations界面使我们能够指定密钥的生存时间。 在我们的情况下,它用作用户密钥。

接下来,我们创建一个注入了缓存服务的控制器。

package com.gkatzioura.spring.controller;import com.gkatzioura.spring.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
public class MessageController {@Autowiredprivate CacheService cacheService;@RequestMapping(value = "/message",method = RequestMethod.GET)@ResponseBodypublic List<String> greeting(String user) {List<String> messages = cacheService.listMessages(user);return messages;}@RequestMapping(value = "/message",method = RequestMethod.POST)@ResponseBodypublic String saveGreeting(String user,String message) {cacheService.addMessage(user,message);return "OK";}}

最后但并非最不重要的是我们的Application类

package com.gkatzioura.spring;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

为了运行只是问题

gradle bootRun

翻译自: https://www.javacodegeeks.com/2015/08/integrate-redis-to-your-spring-project.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自学前端的误区和痛点解决办法

网上有很多自学的方案路线&#xff0c;还有一些知道&#xff1b;但是我感觉他们很多人都是没有真实学习过的&#xff0c;很多人说的那些路线&#xff0c;真的是扯淡&#xff1b;肯定不是自己通过自学后的感悟&#xff0c;他们所谓的路线可能是结合培训班大纲和知乎的一些答案组…

指纹识别工具(CMSeek)

你喜欢上别人挺好的啊&#xff0c;不然我总觉得我们还有可能。。。 ---- 网易云热评 介绍&#xff1a;一款扫描CMS相关信息的软件&#xff0c;该软件可进行170多个CMS的基本检测&#xff0c;可检测Drupal版本信息&#xff0c;可扫描多个站点 下载地址&#xff08;软件作者&…

kafka监控工具kafkaOffsetMoniter的使用

简介 KafkaOffsetMonitor是由Kafka开源社区提供的一款Web管理界面&#xff0c;用来实时监控Kafka的Consumer以及Partition中的Offset&#xff0c;可以在web界面直观的看到每个Partition的Message的增长速度&#xff0c;是否消费&#xff0c;是否阻塞等。 使用 如果不想编译&…

前端开发攻城狮必须知道的开发环境和插件

前端开发&#xff0c;做到后面&#xff0c;是可以走很多方向的&#xff1b;但是要保证后期的平滑过度&#xff0c;前期还是要把一些必须的知识搞扎实的&#xff1b;下面是我根据自己学习的感悟&#xff0c;写的一些东西&#xff1b;一个网站的流程,由前端工程师 使用 HTMLCSSJa…

hibernate示例_通过示例Hibernate–第1部分(删除孤儿)

hibernate示例所以我想做一系列的冬眠例子&#xff0c;展示冬眠的各种特征。 在第一部分中&#xff0c;我想展示有关删除孤儿功能及其在故事情节中的使用方式。 因此&#xff0c;让我们开始:) 先决条件 &#xff1a; 为了尝试以下示例&#xff0c;您将需要以下提到的JAR文件&…

docker更换国内镜像源

国内下载docker镜像大部分都比较慢&#xff0c;下面给大家介绍2个镜像源。 一、阿里云的docker镜像源 注册一个阿里云用户,访问 https://cr.console.aliyun.com/#/accelerator 获取专属Docker加速器地址 使用的时候修改/etc/docker/daemon.json文件就可以了&#xff0c;修改保…

【APICloud系列|22】关于苹果开发者账号续费的总结

以前用APICloud开发的一款App应用,苹果开发者账号一般需要续费,按年收费,个人或者公司$99/年,企业$199年。里面涉及到的邓白氏编码,开通,证书,上架在这里不做讨论,需要的话可以看我以前的帖子。 使用APPuploader申请ios开发证书及ios发布证书教程 上架ios应用到苹果应用…

以编程方式衡量分配

我从Heinz Kabutz撰写的Java专家通讯中获得了这个技巧。 &#xff08;对于所有想要了解JDK内容的Java开发人员来说&#xff0c;这是绝对必要的&#xff01;&#xff09; 特别是对于编写低延迟代码但对于普通Java代码的开发人员来说&#xff0c;分配是您真正要避免的事情。 有关…

(转)搞定DC/DC电源转换方案设计,必看金律十一条

[导读] 搞嵌入式的工程师们往往把单片机、ARM、DSP、FPGA搞的得心应手&#xff0c;而一旦进行系统设计&#xff0c;到了给电源系统供电&#xff0c;虽然也能让其精心设计的程序运行起来&#xff0c;但对于新手来说&#xff0c;有时可能效率低下&#xff0c;往往还有供电电流不足…

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程代码执行漏洞 漏洞概述: ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。借鉴Struts框架的Action对象&#xff0c;同时也使用面向对象的开发结构和MVC模式。1月11日&#xff0c;ThinkPHP官方发布新版本5.0.24&#xff0c…

CSDN如何上传视频?

最近想在CSDN上面上传视频&#xff0c;发现找不到入口&#xff0c;包含APP和PC端的博客&#xff0c;无奈之下只能咨询客服&#xff0c; 这个是需要提前申请讲师资格&#xff0c;需要3年以上相关经验。 发布纯IT类视频&#xff0c;先申请讲师&#xff0c;讲师申请 按照提示信息…

读《数学之美》第四章 谈谈分词

中文分词其实有点像古代的句读&#xff08;dou&#xff09;&#xff0c;韩愈的《师说》中就有&#xff1a;“彼童子之师&#xff0c;授之书而习其句读者也”。古人文章是没有标点符号的&#xff0c;行文一气呵成。如果不懂离经断句&#xff0c;就很难理解古文的意思。从某种程度…

【APICloud系列|17】百度开发者平台为了帮助开发者积极开展APP隐私合规风险排查工作, 准确高效的识别违规风险

前段时间开发了一款APP,最近有时间看看了一下自己的邮件。 发现一条比较有意思的。 申请入口 为什么会受到这个邮件呢,因为我安卓上架了华为应用商店、百度手机开放平台,小米应用商店,阿里应用分发平台、腾讯应用宝,360这个不谈,一个IOS的苹果应用商店。 这个只是针对那…

sphinx配置 + php

1. 为什么要使用Sphinx假设你现在运营着一个论坛&#xff0c;论坛数据已经超过100W&#xff0c;很多用户都反映论坛搜索的速度非常慢&#xff0c;那么这时你就可以考虑使用Sphinx了&#xff08;当然其他的全文检索程序或方法也行&#xff09;。 2. Sphinx是什么Sphinx由俄…

Java数字格式:DecimalFormat

在Java Numeric Formatting一文中 &#xff0c;我描述并演示了NumberFormat静态方法提供的一些有用实例&#xff0c;例如NumberFormat.getNumberInstance&#xff08;Locale&#xff09; &#xff0c; NumberFormat.getPercentInstance&#xff08;Locale&#xff09; &#xf…

微信公众号(订阅号)如何开通付费功能?

前几天看了一下启舰的一个视频中谈到他做自媒体的收入,我记得应该有一年30多万的收入,大概组成是微信公众号广告每个月2万*12个月。两本安卓书收取版权提成,根据出版量8%-10%不等,他一年的出版量在10000左右吧,每本书每个月大概有2000元的样子*12个月,还有一些B站及其他的…

Kunyu(坤舆)

本文转载于&#xff1a;https://www.anquanke.com/post/id/248802 0x00 介绍 工具介绍 Kunyu (坤舆)&#xff0c;名字取自 <坤舆万国全图> &#xff0c;测绘实际上是一个地理信息相关的专业学科&#xff0c;针对海里的、陆地的、天上的地理信息进行盘点。同样应用于网络…

rabbitmq——镜像队列

转自&#xff1a;http://my.oschina.net/hncscwc/blog/186350?p1 1. 镜像队列的设置 镜像队列的配置通过添加policy完成&#xff0c;policy添加的命令为&#xff1a; rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority] -p Vhost: 可选参数&#x…

微信订阅号如何开通付费功能

前几天看了一下启舰的一个视频中谈到他做自媒体的收入&#xff0c;我记得应该有一年30多万的收入&#xff0c;大概组成是微信公众号广告每个月2万*12个月。两本安卓书收取版权提成&#xff0c;根据出版量8%-10%不等&#xff0c;他一年的出版量在10000左右吧&#xff0c;每本书每…