基于Redis实现分布式自增主键
创始人
2024-05-30 15:56:33
0

文章目录

  • 一、原理
  • 二、实战
    • 1、maven中新增redis依赖
    • 2、redis连接属性配置
    • 3、自定义Redis主键生成器RedisIdentifierGenerator
    • 4、指定主键id的生成策略`IdType.ASSIGN_ID`
    • 5、测试


一、原理

基于Redis实现分布式自增主键的核心原理是INCR命令,每次调用将对应键 key 储存的数字值加上1,所以可以轻松实现类似Mysql数据库中的自增主键。

缺点:只支持数值型主键,如果缓存丢失,会造成主键重复。

[root@Mobile redis-stable]# redis-cli 
127.0.0.1:6379> incr mycounter
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> incr mycounter
(integer) 1
127.0.0.1:6379> incr mycounter
(integer) 2
127.0.0.1:6379>

二、实战

整体项目还是采用spring boot + mybaits-plus + mysql

其他内容可以参考:mybatis-plus雪花算法生成Id使用详解

本文主要是将其中默认的雪花算法的ID生成器替换成了自定义的Redis分布式ID生成器。

1、maven中新增redis依赖

   org.springframework.bootspring-boot-starter-data-redis

2、redis连接属性配置

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456

3、自定义Redis主键生成器RedisIdentifierGenerator

@Component
public class RedisIdentifierGenerator implements IdentifierGenerator{@ResourceRedisTemplate redisTemplate;@Overridepublic Number nextId(Object entity) {//可以将当前传入的class全类名来作为bizKey,或者提取参数来生成bizKey进行分布式Id调用生成.String bizKey = entity.getClass().getName();//根据bizKey调用分布式ID生成return redisTemplate.opsForValue().increment(bizKey);}
}

4、指定主键id的生成策略IdType.ASSIGN_ID

@TableName(value ="user")
@Data
@EqualsAndHashCode
public class User implements Serializable {/*** 主键ID*/@TableId(value = "id",type = IdType.ASSIGN_ID)//@TableId(value = "id",type = IdType.AUTO)private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮箱*/private String email;@TableField(exist = false)private static final long serialVersionUID = 1L;
}

5、测试

    @Testpublic void testInsert() {System.out.println("----- insert method test ------");User user = new User();user.setName("test");user.setAge(13);user.setEmail("101@qq.com");userMapper.insert(user);System.out.println(user.toString());}

由RedisIdentifierGenerator分配了主键id为1
在这里插入图片描述

相关内容

热门资讯

讲题算补课吗 讲题算补课吗不算,讲题并不算补课。讲题只是课后的一个习题讲解,并且这样子最好就是放到一型册个课后服务...
你知道的神话故事有? 你知道的神话故事有?封神之战 逐鹿之战 水神大战火神 精卫填海 夸父逐日 杨戬救母劈桃山 沉香救母劈...
谁有描写声音的 英语单词?我急... 谁有描写声音的 英语单词?我急用!要写出这是什么东西的声音。ring电话声。oh感叹词欧bang 撞...
至尊龙纹为什么从152章就看不... 至尊龙纹为什么从152章就看不了?未克从,黄金赠路岁晏,十载陇西头。
李九重在相声界的地位如何? 李九重在相声界的地位如何?地位是挺高的,而且他也是一位非常优秀的相声演员,出演过很多优秀的作品。李九...
《美好人生》所以歌曲 《美好人生》所以歌曲《美好人生》全部歌曲序号 歌曲名称 歌手 播放 送歌 1 千里之外 周杰伦 ...
3.05 2400AP的兽王L... 3.05 2400AP的兽王LR 24%暴击 120命中.秒伤应该大概多少?我打AG70级的木桩才1...
开塞36首小提琴练习曲1多少级 开塞36首小提琴练习曲1多少级开塞36首练习曲的第一首练习曲,一般收录在小提琴考级的第二级,也有收录...
关于怀孕的。 关于怀孕的。上个月30号来的月经,这个月18号和老公同房了,今天来了月经,是不是就代表不会怀孕了?指...
上夜班很累 上夜班很累以前我也上过夜班,上夜班的人一般都是生物钟与别要刚好完全相反,所以白天的休息时间一定要足,...
九老十三匠是指哪些? 九老十三匠是指哪些?同上 。。木匠、泥水匠、。木匠、泥水匠、石匠、铁匠、船匠、佛匠、雕花匠、搭彩...
有哪些好玩有趣的的休闲益智游戏... 有哪些好玩有趣的的休闲益智游戏?您好,七麦数据为您解答~对抗类的休闲游戏其实也很火,如之前火爆全网的...
找一首老歌 找一首老歌我想找一首歌是一个男的唱的我记得里面有一句歌词是什么难舍难了.........什么岩一首还...
电影《无双》中李问真的是画家吗... 电影《无双》中李问真的是画家吗?电影的结局已经很清楚,李问是画家,歼链秀清终究还是蠢尘无带改禅法忍受...
年轻人一年四季在打工,仍旧穷得... 年轻人一年四季在打工,仍旧穷得叮当响,这是为什么?年轻人一年闹中四季在打工,仍旧穷得叮当响,主要的嫌...
搭帐篷是小猪佩奇搭档吗 搭帐篷是小猪佩奇搭档吗搭帐篷是小猪佩奇搭档。根据查询相关公开信息显示,培衡正《小猪佩奇奇遇记》第57...
垂手可得的幸福可信吗 垂手可得的幸福可信吗恩...最好还是三思而后行啊不要太相信了,不要拿自己的幸福开玩笑,太容易得到的不...
有哪些一流的中文流行歌曲作词人... 有哪些一流的中文流行歌曲作词人?他们各有什么强项?邓丽君,感情很细腻,一般都是做的男女情爱的歌曲,让...
你们炒股的感受经验和心得,分享... 你们炒股的感受经验和心得,分享下抽屉有几抽屉的东西,要不要丢?76还行,一有时间我就追啊32
雾起我在迷雾中爱你,雾散众人皆... 雾起我在迷雾中爱你,雾散众人皆知我爱你下句雾起我在迷雾中爱你,雾散众人皆知我爱你,希望未来的路,有你...