當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
在Spring中使用Redis
生活随笔
收集整理的這篇文章主要介紹了
在Spring中使用Redis
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
隨著NoSQL解決方案在許多問題上越來越受歡迎,現代項目越來越多地考慮使用一些(或幾種)NoSQL代替(或并排)傳統RDBMS。 我已經在本 , 本和本文章中介紹了我在MongoDB上的經驗。 在本文中,我想對Redis (高級鍵值存儲)進行一些調整。 除了非常豐富的鍵值語義外, Redis還支持發布訂閱消息和事務。 在本文中,我將僅介紹一下表面,并演示將Redis集成到Spring應用程序中有多么簡單。 與往常一樣,我們將從我們項目的Maven POM文件開始: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelversion>4.0.0</modelversion><groupid>com.example.spring</groupid><artifactid>redis</artifactid><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceencoding>UTF-8</project.build.sourceencoding><spring.version>3.1.0.RELEASE</spring.version></properties><dependencies><dependency><groupid>org.springframework.data</groupid><artifactid>spring-data-redis</artifactid><version>1.0.0.RELEASE</version></dependency><dependency><groupid>cglib</groupid><artifactid>cglib-nodep</artifactid><version>2.2</version></dependency><dependency><groupid>log4j</groupid><artifactid>log4j</artifactid><version>1.2.16</version></dependency><dependency><groupid>redis.clients</groupid><artifactid>jedis</artifactid><version>2.0.0</version><type>jar</type></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-core</artifactid><version>${spring.version}</version></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-context</artifactid><version>${spring.version}</version></dependency></dependencies>
</project> Spring Data Redis是Spring Data框架下的另一個項目,可將Redis無縫注入到您的應用程序中。 有多個Java的Redis客戶端,我選擇Jedis是因為它穩定并且在撰寫本文時由Redis團隊推薦。 我們將從簡單的配置開始,并首先介紹必要的組件。 然后,隨著我們的前進,將對配置進行一些擴展以展示pub-sub功能。 得益于Java config的支持,我們將創建配置類,并對所有依賴項進行強類型化,不再使用XML: package com.example.redis.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericToStringSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class AppConfig {@BeanJedisConnectionFactory jedisConnectionFactory() {return new JedisConnectionFactory();}@BeanRedisTemplate< String, Object > redisTemplate() {final RedisTemplate< String, Object > template = new RedisTemplate< String, Object >();template.setConnectionFactory( jedisConnectionFactory() );template.setKeySerializer( new StringRedisSerializer() );template.setHashValueSerializer( new GenericToStringSerializer< Object >( Object.class ) );template.setValueSerializer( new GenericToStringSerializer< Object >( Object.class ) );return template;}
} 基本上,這是我們需要的所有假設,前提是我們擁有單個Redis服務器并以默認配置在localhost上運行。 讓我們考慮幾種常見的用例:將鍵設置為某個值,存儲對象以及最終實現pub-sub。 存儲和檢索鍵/值對非常簡單: @Autowired private RedisTemplate< String, Object > template;public Object getValue( final String key ) {return template.opsForValue().get( key );
}public void setValue( final String key, final String value ) {template.opsForValue().set( key, value );
}
(可選)可以將密鑰設置為過期( Redis的另一個有用功能),即讓我們的密鑰在1秒鐘后過期:
public void setValue( final String key, final String value ) {template.opsForValue().set( key, value );template.expire( key, 1, TimeUnit.SECONDS ); }可以將任意對象作為哈希(映射)保存到Redis中 ,以便保存某些類User的實例
public class User {private final Long id;private String name;private String email;// Setters and getters are omitted for simplicity }使用密鑰模式“ user:<id>”進入Redis :
public void setUser( final User user ) {final String key = String.format( "user:%s", user.getId() );final Map< String, Object > properties = new HashMap< String, Object >();properties.put( "id", user.getId() );properties.put( "name", user.getName() );properties.put( "email", user.getEmail() );template.opsForHash().putAll( key, properties); }分別使用id可以輕松地檢查和檢索對象。
public User getUser( final Long id ) {final String key = String.format( "user:%s", id );final String name = ( String )template.opsForHash().get( key, "name" );final String email = ( String )template.opsForHash().get( key, "email" );return new User( id, name, email ); } 使用Redis可以完成很多工作,我強烈建議您看一下。 它當然不是靈丹妙藥,但可以非常輕松地解決許多具有挑戰性的問題。 最后,讓我展示如何在Redis中使用發布訂閱消息。 讓我們在這里添加更多配置(作為AppConfig類的一部分): @Bean MessageListenerAdapter messageListener() {return new MessageListenerAdapter( new RedisMessageListener() ); }@Bean RedisMessageListenerContainer redisContainer() {final RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory( jedisConnectionFactory() );container.addMessageListener( messageListener(), new ChannelTopic( "my-queue" ) );return container; } 消息偵聽器定義的樣式對于Spring用戶應該非常熟悉:通常,與我們定義JMS消息偵聽器所采用的方法相同。 缺少的部分是我們的RedisMessageListener類定義: package com.example.redis.impl;import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener;public class RedisMessageListener implements MessageListener {@Overridepublic void onMessage(Message message, byte[] paramArrayOfByte) {System.out.println( "Received by RedisMessageListener: " + message.toString() );} } 現在,當我們有了消息監聽器時,讓我們看看如何使用Redis將一些消息推送到隊列中。 和往常一樣,這很簡單: @Autowired private RedisTemplate< String, Object > template;public void publish( final String message ) {template.execute(new RedisCallback< Long >() {@SuppressWarnings( "unchecked" )@Overridepublic Long doInRedis( RedisConnection connection ) throws DataAccessException {return connection.publish(( ( RedisSerializer< String > )template.getKeySerializer() ).serialize( "queue" ),( ( RedisSerializer< Object > )template.getValueSerializer() ).serialize( message ) );}}); }基本上可以快速入門,但是絕對足以愛上Redis 。
參考: Andriy Redko {devmind}博客上的JCG合作伙伴 Andrey Redko 結合使用Spring和Redis 。
翻譯自: https://www.javacodegeeks.com/2012/06/using-redis-with-spring.html
總結
以上是生活随笔為你收集整理的在Spring中使用Redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度网盘提取码怎么设置?百度云设置提取码
- 下一篇: 我的世界电脑版生存模式合成表(我的世界生