Redis在java中的应用
1:引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
2:编写配置文件
spring.redis.host=192.168.197.170 spring.redis.password=redis spring.redis.port=6379
3:实际代码应用
在代码中将关键类注入
@Autowired private StringRedisTemplate redisTemplate;
普通 k v插入测试
@GetMapping("/set")
@ResponseBody
public TestUserEntity setToRedis(){
redisTemplate.opsForValue().set("k1","v1");
return null;
}
普通k v获取测试
@GetMapping("/get")
@ResponseBody
public Object get(String key){
return redisTemplate.opsForValue().get(key);
}
先访问set方法,然后访问get方法,结果如下

把复杂对象存入,这里使用fastjson的方式存入 这样的好处是,存储的结构和解析的结构都由我们自己掌控,否则我们存进去的一些值 其实是会被转换的,这样容易造成一些不必要的处理麻烦
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
1:造就对象存起来 这个存储结构可以理解成 Map<String, Map<String, Object>>
@GetMapping("/setobj")
@ResponseBody
public TestUserEntity setObjToRedis(){
BoundHashOperations<String, Object, Object> e = redisTemplate.boundHashOps("entity"); //这个是最外层的 key value
for (int i = 0; i < 5; i++) {
TestUserEntity entity = new TestUserEntity();
entity.setCreatetime(new Date());
entity.setId(i);
entity.setMark("测试传入对象模型");
entity.setName("张三");
entity.setPhone("110");
entity.setPswd("adsfads45646asdf");
e.put("k" + i, JSON.toJSONString(entity)); //这个是最外层value的k v
}
return null;
}
先看看访问后,库里的展现形式

2:新增成功了,再来看获取,也是一个道理,获取的数据是什么类型 就用什么来序列化即可
先创建一个方法,随便get一个值试一下
@GetMapping("/getObj")
@ResponseBody
public Object getObj(String key){
BoundHashOperations<String, Object, Object> entity = redisTemplate.boundHashOps("entity");
Object o1 = entity.get(key);
TestUserEntity testUserEntity = JSON.parseObject(o1.toString(), TestUserEntity.class);
return testUserEntity;
}
访问结果如下 说明解析是没问题的

3:如果想把数据全部拿到,根据存的时候的结构,其实它是一个list集合,集合里面是多个对象,这是一个非常简单的结构,解析也比较容易
下面方法中用了stream流,如果不熟悉,其实参照上面获取一个数据的方法,也有办法拿到所有的数据
/** * 获取全部数据 * */ @GetMapping("/getObjList") @ResponseBody public Object getObjList(){ BoundHashOperations<String, Object, Object> entity = redisTemplate.boundHashOps("entity"); List<Object> values = entity.values(); List<TestUserEntity> collect = values.stream().map(o -> { return JSON.parseObject(o.toString(), TestUserEntity.class); }).collect(Collectors.toList()); return collect; }
访问一下

上面描述的是redis两个比较常用的主要方法之一,当然,上面有个小点,那就是这个关键方法的类用了StringRedisTemplate,我们试着把前面的String去掉,大家就能看到区别了
// @Autowired // private StringRedisTemplate redisTemplate; @Autowired private RedisTemplate redisTemplate;
把redis中数据清掉后,重新访问setobj方法,然后我们打开客户端看,就会发现如下情况

其实是String序列化和没有序列化的区别,解析不影响,我们可以点开源码看一下
直接打开StringRedisTemplate

这个string()是啥了,在点进去

没错就是熟知的UTF8编码
而不带String的,则没有实现u8的序列化

浙公网安备 33010602011771号