redis序列化配置(increment()函数)

本文目录
- increment()函数
- redis怎么序列化
- 2022-03-12 SpringBoot 使用redis做缓存,设置失效时间以及序列化
- spring+jedis保存数据到redis的key乱码问题
- redis中怎么配置httpsession序列化
- redis什么时候插入数据需要做序列化
- redis中为什么要序列化key
increment()函数
本文使用spring封装的spring-data-redis进行操作,在对某key进行increment()方法实现计数器,此计数器可以用在分布式当中,不会局限于某一jvm。
increment()方法是实现递增,对于同一个KEY,执行一次,如果key存在,则把value的值增加delta,
注意:
Spring对Redis序列化的策略有两种,分别是StringRedisTemplate和RedisTemplate,其中StringRedisTemplate用于操作字符串,RedisTemplate使用的是JDK默认的二进制序列化。
大家都知道redis序列化是将key,value值先转换为流的形式,再存储到redis中。
RedisTemplate是使用的JdkSerializationRedisSerializer序列化,序列化后的值包含了对象信息,版本号,类信息等,是一串字符串,所以无法进行数值自增操作。
而StringRedisTemplate序列化策略是字符串的值直接转为字节数组,所以存储到redis中是数值,所以可以进行自增操作。
下列方法是实现每个月重置计数器,是每个月计数器从零开始计数:
如果需要根据时间递增,我们的key可以设为和时间相关的字符串,具体的时间转化我是用的是hutool工具,比较方便。
hutool文档链接
redis怎么序列化
redis序列化数据有多重方式:
JacksonJsonRedisSerializer
JdkSerializationRedisSerializer
OxmSerializer
- public enum StringSerializer implements RedisSerializer《String》 {
- INSTANCE;
- public byte serialize(String s) throws SerializationException {
- return (null != s ? s.getBytes() : new byte);
- }
- public String deserialize(byte bytes) throws SerializationException {
- if (bytes.length 》 0) {
- return new String(bytes);
- } else {
- return null;
- }
- }
- }1234567891011121314
- public RedisConnectionFactory redisConnectionFactory() {
- JedisConnectionFactory cf = new JedisConnectionFactory();
- cf.setHostName("172.16.28.214");
- cf.setPort(6379);
- //cf.setPassword("123456");
- cf.afterPropertiesSet();
- return cf;
- }
- @Test
- public void test() {
- try {
- RedisConnectionFactory connectionFactory = redisConnectionFactory();
- RedisTemplate《String, Serializable》 redis = new RedisTemplate《String, Serializable》();
- redis.setConnectionFactory(connectionFactory);
- redis.setKeySerializer(StringSerializer.INSTANCE);
- // redis.setValueSerializer(new JdkSerializationRedisSerializer());
- redis.setValueSerializer(new JacksonJsonRedisSerializer《TestUser》(TestUser.class));
- redis.afterPropertiesSet();
- ValueOperations《String, Serializable》 ops = redis.opsForValue();
- TestUser user1 = new TestUser();
- user1.setName("lisi");
- user1.setId(20L);
- // ops.set("lisi", user1);
- TestUser user = (TestUser) ops.get("lisi");
- System.out.println(user.getName());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
这里前两种测试
1.StringSerializer.java
2.测试类
2022-03-12 SpringBoot 使用redis做缓存,设置失效时间以及序列化
SpringBoot的cache缓存,是针对返回值的一种操作
springboot使用redis做缓存时,默认只需要导入redis依赖,即可实现使用redis做缓存
不需要导入cache依赖
在启动类上加上 @EnableCaching 即可开启缓存功能
关于各个注解的使用,这里不再细说,网上详细的教程很多,这里主要讲一下如何指定过期时间
默认是永不过期,如果需要指定过期时间,则需要增加配置类
spring+jedis保存数据到redis的key乱码问题
spring-data-redis的RedisTemplate《K, V》模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化,解决方案就是手动把序列化方式设置为StringRedisSerializer;代码如下
private RedisTemplate《String, Object》 redisTemplate;
@SuppressWarnings({ "unchecked", "rawtypes" })
@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {
//spring-data-redis的RedisTemplate《K, V》模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化(key会乱码)
//手动指定键序列化类型使用stringRedisSerializer
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
this.redisTemplate = redisTemplate;
}
redis中怎么配置httpsession序列化
spring-data-redis 中的核心操作类是 RedisTemplate《K, V》
可以看出 key 和 value 都是泛型的,这就涉及到将类型进行序列化的问题了
所就在 RedisTemplate 中还有几个 RedisSerializer~
***隐藏网址***
2)oxmSerializer()是我新增的,用于定义一个基于Jaxb2Marshaller的OxmSerializer Bean(后面将会用到)
redis什么时候插入数据需要做序列化
java把对象从内存放到硬盘为啥需要序列化?内存可能是用堆栈、寄存器存储的,断电后消失(RAM);但是磁盘不一样,磁盘固化数据(ROM)。
需
要序列化,主要是一种针对需要I/O操作的,此时写入磁盘恰巧需要I/O。让类实现serializable接口,此类的对象就可以被序列化了。针对对象
的对象流:ObjectOutputStream,调用writeObject()/readObject()可以实现序列化、反序列化。
redis中为什么要序列化key
如果是数据完全可以使用JSON方式。毕竟redis直接set、get使用起来门槛低很多。redis是没有提供专用的设置对象方法,需要自己进行改写。如果是担心JSON转对象会消耗资源的情况,这个问题需要考量几个地方,第一点:就是使用的JSON转换lib是否就会存在性能问题。第二点:就是数据的数据量级别,如果是存储百万级的大数据对象,建议采用存储序列化对象方式。如果是少量的数据级对象,或者是数据对象字段不多,还是建议采用JSON转换成String方式。毕竟redis对存储字符类型这部分优化的非常好。具体采用的方式与方法,还要看你所使用的场景。

本文相关文章:
matlab怎么用表达式绘曲线(用matlab 怎么画函数曲线图)
2025年11月2日 07:45
类的构造函数和析构函数(构造函数和析构函数的主要作用是什么它们各有什么特性)
2025年10月28日 20:30
matlab编写函数(matlab中自己编写的函数文件可以直接运行吗)
2025年10月28日 11:45
trim函数可以用来删除字符串中间包含的空格(怎么用trim函数来去除EXCEL表格中的空格)
2025年10月26日 23:30
oracle导出用户的存储过程(ORACLE如何实现函数、包、存储过程的导入和导出)
2025年10月24日 10:00
更多文章:
c程序设计实训教程第二版(C程序设计(第三版)与C程序设计(第二版)有什么区别都是谭浩强的那个)
2025年10月17日 06:00
phpstorm怎么保存(phpstorm 怎么设置自动上传)
2025年12月11日 13:00
怎样用html制作一个简单的网页(怎样利用记事本和HTML制作一个简单的网页)
2026年4月21日 01:15
无法打开360安全卫士(360安全卫士打不开怎么办为什么360安全卫士打不开)
2026年8月20日 04:45
美国img模特经纪公司(有谁知道国际有名的模特经纪公司有那些)
2026年8月7日 17:15
excel2010函数教案(excel函数培训教程步骤讲解)
2026年7月19日 04:45
datagridview单元格值改变事件(C# 如何在dataGridView中直接修改单元格的值)
2025年12月28日 05:45
java字符串截取后两位(JAVA截取所有指定字符后面的字符串)
2025年12月5日 23:15
soap请求(soap协议和普通的post请求有什么区别呢)
2026年5月6日 22:15
















