javascript
Redis学习笔记——SpringDataRedis的使用
與Spring集成
我需要哪些jar包?
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId> </dependency> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId> </dependency>如何配置spring配置文件?
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置IP地址與端口號,連接redis服務器--><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:hostName="127.0.0.1" p:port="6379" p:usePool="true"/><!--配置redisTemplate--><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="jedisConnectionFactory"/><!--配置stringRedisTemplate--><bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate" p:connectionFactory-ref="jedisConnectionFactory"/> </beans>一般情況,只需要配置RedisTemplate或StringRedisTemplate其中一個就行,常用的為StringRedisTemplate。
RedisTemplate與StringRedisTemplate的區別?
StringRedisTemplate:
public class StringRedisTemplate extends RedisTemplate<String, String> {public StringRedisTemplate() {StringRedisSerializer stringSerializer = new StringRedisSerializer();this.setKeySerializer(stringSerializer);this.setValueSerializer(stringSerializer);this.setHashKeySerializer(stringSerializer);this.setHashValueSerializer(stringSerializer);}public StringRedisTemplate(RedisConnectionFactory connectionFactory) {this();this.setConnectionFactory(connectionFactory);this.afterPropertiesSet();}protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {return new DefaultStringRedisConnection(connection);} }從上面的代碼可以看出,StringRedisTemplate繼承了鍵值類型都為String的RedisTemplate,且使用StringRedisSerializer作為序列化工具。所以StringRedisTemplate能使用的方法,RedisTemplate都能使用,下面的例子只會展示StringRedisTemplate的方法。
StringRedisSerializer:
public class StringRedisSerializer implements RedisSerializer<String> {private final Charset charset;public StringRedisSerializer() {this(Charset.forName("UTF8"));}public StringRedisSerializer(Charset charset) {Assert.notNull(charset);this.charset = charset;}public String deserialize(byte[] bytes) {return bytes == null?null:new String(bytes, this.charset);}public byte[] serialize(String string) {return string == null?null:string.getBytes(this.charset);} }可以看出,StringRedisSerializer使用UTF8字符集處理字符串。
使用API操作基本redis基本數據類型
spring提供哪些接口操作redis基本數據?
第一組
ValueOperations:字符串類型操作 ListOperations:列表類型操作 SetOperations:集合類型操作 ZSetOperations:有序集合類型操作 HashOperations:散列操作第二組
BoundValueOperations:字符串類型操作 BoundListOperations:列表類型操作 BoundSetOperations:集合類型操作 BoundZSetOperations:有序集合類型操作 BoundHashOperations:散列操作如何獲得接口的實現?
第一組
ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue(); ListOperations<String, String> listOperations = stringRedisTemplate.opsForList(); SetOperations<String, String> setOperations = stringRedisTemplate.opsForSet(); ZSetOperations<String, String> zSetOperations = stringRedisTemplate.opsForZSet(); HashOperations<String, Object, Object> hashOperations = stringRedisTemplate.opsForHash();第二組
BoundValueOperations<String, String> valueOperations = stringRedisTemplate.boundValueOps("key"); BoundListOperations<String, String> listOperations = stringRedisTemplate.boundListOps("key"); BoundSetOperations<String, String> setOperations = stringRedisTemplate.boundSetOps("key"); BoundZSetOperations<String, String> zSetOperations = stringRedisTemplate.boundZSetOps("key"); BoundHashOperations<String, Object, Object> hashOperations = stringRedisTemplate.boundHashOps("key");從上面兩組實現可以發現,第二組API只是在第一組API的上面將key值的綁定放在獲得接口時了,此舉方便了每次操作基本數據類型的時候不用反復的去填寫key值,只需要操作具體的value就行了。
具體有哪些數據操作方式,如ValueOperations的get與set,ListOperations的push與pop等可以參照:Redis學習筆記(2)-Redis數據類型。他們的方法簽名與客戶端redis-cli操作redis時的簽名是一樣的。
使用API操作消息隊列
使用API前需要了解
Redis學習筆記(3)-Redis事務,過期時間,隊列
如何發送消息隊列?
RedisTemplate template = template.convertAndSend("channel", "message");第一個參數為發送的消息的頻道,第二個參數為消息本身。
如何接受隊列中的消息?
public interface MessageDelegate {void handleMessage(String message);void handleMessage(Map message); void handleMessage(byte[] message);void handleMessage(Serializable message);void handleMessage(Serializable message, String channel); }首先,需要一個符合MessageDelegate 接口方法簽名的類,這個類是自定義的,可以使用MessageDelegate 中的一個或多個簽名方式,如:
public class UserMessageDelegate {public void handleMessage(String message) {System.out.println(message);} }得到此類后,將此類注冊到消息監聽容器中:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:redis="http://www.springframework.org/schema/redis"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/redishttp://www.springframework.org/schema/redis/spring-redis.xsd"><redis:listener-container><redis:listener ref="listener" method="handleMessage" topic="chatroom"/></redis:listener-container><bean id="listener" class="com.hzw.redis.listener.UserMessageDelegate"/></beans>其中,topic就是你要監聽的頻道。
總結
以上是生活随笔為你收集整理的Redis学习笔记——SpringDataRedis的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于异常nested exception
- 下一篇: gradle idea java ssm