Redis API
首先创建一个springboot项目
添加redis依赖
<!--reids整合 start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--reids整合 end -->
通过getBean的方式获取redis并进行调用

调用的类

redis连接配置

这里有一个问题,需要设置redis允许远端进行访问
先获取redis所有的配置项

临时修改reids允许远端访问,将 protected-mode 修改为no

RedisTemplate使用
redisTemplate.opsForValue().set("hello", "hello");
存入到redis中的key为

因为RedisTemplate会在存入到redis时,使用默认的序列化
StringRedisTemplate使用
stringRedisTemplate.opsForValue().set("hello01","hello01");

StringRedisTemplate不会将key序列化
使用低阶的API
RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
connection.set("hello02".getBytes(),"hello02".getBytes());
System.out.println(connection.get("hello02".getBytes()));
需要先获取连接,在进行redis的操作,也不会进行序列化

Redis hash 实现
在redis中存放键值对的形式
package com.zhou;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhou.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.hash.Jackson2HashMapper;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@Component
public class TestRedis {
@Autowired
RedisTemplate redisTemplate;
@Autowired
ObjectMapper objectMapper;
public void testRedis(){
User user = new User("ceshi",20);
Jackson2HashMapper jm = new Jackson2HashMapper(objectMapper, false);
redisTemplate.opsForHash().putAll("sean01",jm.toHash(user));
Map map = redisTemplate.opsForHash().entries("sean01");
user = objectMapper.convertValue(map, User.class);
System.out.println(user);
}
}
User类
package com.zhou.model;
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
自定义template
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
@Configuration
public class MyTemplate {
@Bean
public StringRedisTemplate xxx(RedisConnectionFactory fc){
StringRedisTemplate template = new StringRedisTemplate(fc);
template.setHashKeySerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
return template;
}
}
发布订阅
//发布消息
stringRedisTemplate.convertAndSend("aaa","hahaha");

//订阅消息
RedisConnection connection = stringRedisTemplate.getConnectionFactory().getConnection();
connection.subscribe(new MessageListener() {
@Override
public void onMessage(Message message, byte[] pattern) {
byte[] body = message.getBody();
System.out.println(new String(body));
}
}, "aaa".getBytes());
//发布消息
stringRedisTemplate.convertAndSend("aaa","hahaha");
1782

被折叠的 条评论
为什么被折叠?



