基于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
在这里插入图片描述

相关内容

热门资讯

小学生手工制作图片 小学生手工制作图片简单一点,好看一点的!折纸花篮制作:用两张正方形彩纸(亦可为两色)作花篮,一长条纸...
女大学生背便宜的包怎么就low... 女大学生背便宜的包怎么就low了背便宜的包怎么就Low了?腋下包腋下包很适合通勤背雹困物,尺寸适中,...
瑞银方锦聪:预料今年即时零售行... 观点网讯:7月11日,瑞银投资银行中国互联网行业研究主管方锦聪预测,2025年即时零售行业(不包括外...
英语怎么区分第一人称,第二人称... 英语怎么区分第一人称,第二人称和第三人称。第一人称就是我(们):单数i,复数we第二人称就是你(们)...
姑姑公布疑脑死亡男童手术时间线... 【#姑姑公布疑脑死亡男童手术时间线# #卫健局回应男童扁桃体手术后脑死亡# 】近日,广东湛江3岁男童...
马蜂窝AI系列应用再升级,全面... 转自:网络7月11日,马蜂窝的深度个性化的攻略定制产品“AI路书”正式宣布向所有用户开放,同步上线“...
追踪|整改!宝山一社区公园亮灯... 转自:上观新闻“晚上7点就亮灯了,还亮到了10点!终于不用摸黑散步了。”顾村镇居民曹先生喜出望外,向...
天津普林预计2025年度上半年... 7月11日,天津普林(002134)发布公告,预计2025年1月1日至2025年6月30日的归母净利...
他在任上主动投案!同一系统今年... 转自:上观新闻10日晚,中央纪委国家监委驻应急管理部纪检监察组、浙江省纪委监委发布消息:浙江省消防救...
晋西车轴:预计上半年净利为12... 晋西车轴晚间披露业绩预告,公司预计2025年半年度实现归属于上市公司股东的净利润为1250万元到15...