<groupId>redis.chlients</groupId>
<artifactId>jedis</xxx>
void setUp(){
jedis = new Jedis("IP地址" ,6379);
jedsi.auth("密码");
jedis.select("1"); //选择数据库
}
void testString(){
String result = jedis.set("name","张三");
sout
Sitrng name = jedis.get("name");
sout
}
void tearDown(){
if(jedis != null){
jedis.close();
}
}
SpringData是Spring中数据操作的模块,包含对各种数据库的集成
其中对Redis的集成模块就叫做SpringDataRedis
官网地址:https://spring.io/projects/spring-data-redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
@Resource
private RedisTemplate redisTemplate;
@Test
void testString() {
//写入一条数据
redisTemplate.opsForValue().set("name","虎哥");
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
得到的结果:
需要解决的问题
因为使用redisTemplate.opsForValue().set(“name”,”虎哥”);得到的不是一个String 类型的字符串,而使一个Object对象
所以存入的就会是java对象,那么就需要对对象进行序列化,从而得到我们需要的类型
package second.config;
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.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
/**
* 创建配置文件的原因:
* 但我们进行写入操作时,在redis数据库中存储的确实一段\xAC\xED\x00\x05t\x00\x06\xE8\x99\x8E\xE5\x93\xA5
*/
@Configuration
public class RedisTemplateConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
//创建redisTemplate对象
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//创建json序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//设置key序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
//设置value序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
//返回
return redisTemplate;
}
}
得到的结果
这样就是我们所需要的结果,但是与此同时,他却不满足内存的要求,因为他多了一个@Class:”second.pojo.user” 这是我们自己定义的接收数据的实体类。他将会占用很大的内存。所以我们就不能这么做。就需要再次进行升级
通过这样得到的结果才是我们真正需要的结果
而Spring官方也同样推出了一个更为好用的**StringRedisTemplate统一API来操作Redis**
如下:
@Resource
private StringRedisTemplate stringRedisTemplate;
public ObjectMapper mapper = new ObjectMapper();
@Test
void getTest() throws JsonProcessingException {
user usr1 = new user("小花", 21);
//手动序列化 : 将java对象转换为json
String s = mapper.writeValueAsString(usr1);
//进行操作
stringRedisTemplate.opsForValue().set("user:300",s);
System.out.println("s==" + s);
//读取数据
String s1 = stringRedisTemplate.opsForValue().get("user:300");
user user = mapper.readValue(s1, user.class);
System.out.println("数据为 : " + user);
/**
* 得到的数据(在redis中存储的) :
* {
* "name": "小花",
* "age": 21
* }
*/
}