[Redis-客户端] RedisTemplate和StringRedisTemplate
目录
🍖6. StringRedisTemplate 解决存储对象的内存开销🍖
🥞1. 项目源码🥞
链接: https://pan.百度.com/s/1iv2_vqLuLkJ-MhSw6VMMHw
提取码: m7cw
🍎2. Maven依赖🍎
-
<!--redis依赖-->
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-data-redis</artifactId>
-
</dependency>
-
<!--连接池-->
-
<dependency>
-
<groupId>org.apache.commons</groupId>
-
<artifactId>commons-pool2</artifactId>
-
</dependency>
🌭3. RedisTemplate入门使用🌭
这里先用单元测试带大家简单入门一下, redisTemplate写入数据和读取数据
代码 :
-
-
class RedisDemoApplicationTests {
-
-
-
private RedisTemplate redisTemplate;
-
-
-
void testString() {
-
// 写入一条String数据
-
redisTemplate.opsForValue().set("name", "张三");
-
// 获取string数据
-
Object name = redisTemplate.opsForValue().get("name");
-
System.out.println("name = " name);
-
}
-
}
输出结果 :
但是回到我们的图形化客户端后发现, 数据的并不是我们想象的那样
这是因为spring.data.redis可以接受任何类型的对象, 最后转换成redis可以处理的字节, 所以存进去name, 张三, 都以Java对象的形式存储, 所以我们接下来要解决redis的序列化问题
🍔4.SpringDataRedis序列化🍔
代码 :
-
-
public class RedisConfig {
-
-
-
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
-
System.out.println("开始redis序列化.....");
-
//创建RedisTempLate对象
-
RedisTemplate<String, Object> template = new RedisTemplate<>();
-
//设置连接工厂
-
template.setConnectionFactory(connectionFactory);
-
//创建JSON序列化工具
-
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
-
//设置Key的序列化(UTF_8格式)
-
template.setKeySerializer(RedisSerializer.string());
-
template.setHashKeySerializer(RedisSerializer.string());
-
//设置value的序列化
-
template.setValueSerializer(jsonRedisSerializer);
-
template.setHashValueSerializer(jsonRedisSerializer);
-
//返回
-
return template;
-
}
-
}
序列化后的输出结果
🍟5.SpringDataRedis返序列化🍟
这次采用存储对象, 并通过反序列化直接接受对象的参数
代码 :
-
-
void testSaveUser() {
-
//写入数据
-
redisTemplate.opsForValue().set("user:100", new User("李四", 28));
-
//获取数据(采用对象接受,也就是反序列化)
-
User user = (User) redisTemplate.opsForValue().get("user:100");
-
System.out.println("反序列化结果 : >> " user);
-
}
输出结果 :
可以看出, 存储的值也是JSON格式
最后控制台的输出, 也是对象的形式去展示, 这是因为JSON值当中包含了一个class的属性, 并读取到了User类的名称
🍖6. StringRedisTemplate 解决存储对象的内存开销🍖
在redis中存储了"@class": "redis.pojo.User",存储了User字节码 带来的问题就是占用了内存开销
这里我们采用StringRedisTemplate, 采用String的序列化策略来解决性能开销问题
代码 :
-
-
private static final ObjectMapper MAPPER = new ObjectMapper();
-
-
private StringRedisTemplate stringRedisTemplate;
-
-
-
void stringRedisTemplateTest() throws JsonProcessingException {
-
//创建对象
-
User user = new User("张大仙", 32);
-
//手动序列化
-
String json = MAPPER.writeValueAsString(user);
-
//写入数据
-
stringRedisTemplate.opsForValue().set("user:200", json);
-
-
//获取数据
-
String userJson = stringRedisTemplate.opsForValue().get("user:200");
-
//手动反序列化
-
User user1 = MAPPER.readValue(userJson, User.class);
-
System.out.println("user1 = " user1);
-
}
输出结果 :
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgjegkg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13