使用redis生成数据库主键自增
来源:互联网 发布:纽约特朗普大厦知乎 编辑:程序博客网 时间:2024/05/16 00:48
开源项目地址: github开源链接
数据库自增什么的麻烦死了,尤其是往后还需要考虑到分布式处理,然后偷了个懒,直接redis来搞起...
下面上代码
先定义个主键生成策略接口,往后方便扩展
/** * 定义主键生成策略接口,以便修改扩展 * @author LeiYong * */public interface KeyGenerate {/** * 生成String类型主键 * @param em * @return */public String generateStringKey(KeyGenerateEnum em);/** * 生成long类型主键 * @param em * @return */public Long generateLongKey(KeyGenerateEnum em);}
接下来提供一个替补队员,基础的主键生成方案,采用随机数(Long)或UUID(String)方式生成
/** * 基础主键生成策略,采用随机数或UUID+随机数 * @author LeiYong * */public class BaseKeyGenerate implements KeyGenerate{@Overridepublic String generateStringKey(KeyGenerateEnum em) {return StringUtil.getUUID()+StringUtil.getNonceStr(6);}@Overridepublic Long generateLongKey(KeyGenerateEnum em) {return System.currentTimeMillis()*1000000+NumberUtil.random(6);}}
主角Redis的缓存主键类登场
/** * 采用Redis的方式产生自增长主键 * @author LeiYong * */public class RedisKeyGenerate implements KeyGenerate{/** * Logger for this class */private final Logger logger = LoggerFactory.getLogger(RedisKeyGenerate.class);private final String SEQUENCE_KEY = "SEQ";@Autowired@Qualifier("redisClientSupport")private RedisClientSupport redisClientSupport;@Overridepublic String generateStringKey(KeyGenerateEnum em) {Long key = generateLongKey(em);if (key!=null) {return key.toString();}//为了防止redis挂了程序能够继续运行return new BaseKeyGenerate().generateStringKey(em);}@Overridepublic Long generateLongKey(KeyGenerateEnum em) {synchronized (em) {try {Long key = redisClientSupport.incrementHash(SEQUENCE_KEY, em.name(), 1l);if (key != null) {return key;}} catch (CacheAccessException e) {logger.warn("generateStringKey(KeyGenerateEnum) - exception ignored", e); //$NON-NLS-1$}}//为了防止redis挂了程序能够继续运行return new BaseKeyGenerate().generateLongKey(em);}}
好了,大功告成,另外使用到了枚举,定义非常简单的枚举就可以了,还是上个代码吧...避免有人不知道枚举,随便举个例子,免得透露了公司数据表,保持枚举名称跟Model类一致即可,往后将说明如何为所有方法的新增自动设置主键,领导再也不用担心新来的小伙伴来问公司主键怎么生成了,直接说句不需要生成,瞬间高大上,秀他一脸,让他懵逼...
借用Redis生成主键实现所有类新增不再需要手动配置主键,序列什么的通通GG
public enum KeyGenerateEnum {ActAttend,ActRecommendDetail,ActType,LogLogin}
最后注明一点,为了方便变更,请在spring中配置bean,以便自动注入及未来方案修改
<bean id="keyGenerate" class="com.cykj.base.core.key.RedisKeyGenerate"></bean>
0 0
- 使用redis生成数据库主键自增
- Oracle数据库,生成自增主键
- 使用数据库序列生成主键
- 【redis】使用redis RedisAtomicLong生成自增的ID值
- 按年月日时分秒+自增序号的一种数据库主键生成策略
- 高并发 数据库自增主键 解决
- oracle数据库中让主键自增
- 令mysql数据库主键自增
- 令数据库主键id是自增
- SOL Server数据库主键自增
- erlang数据库Mnesia主键自增
- MYSQL数据库自增主键的重要性
- erlang mnesia数据库设置主键自增
- hibernate操作oracle数据库 主键自增
- 实现Oracle数据库的自增主键
- 不同数据库的主键自增方式
- 数据库主键自增插入显示值
- 数据库主键自增与insert into
- 基本控件使用(三)(触摸,CallFunc,Schedule)
- uWSGI 服务器的 uwsgi 协议究竟用在何处?
- poj 3020(二分图最小路径覆盖,拆点)
- 培训期间小作业~切换图片
- C#中List与IList的区别
- 使用redis生成数据库主键自增
- CMake编译opencv和argc、argv含义
- SharedPreferences 存储对象
- Codeforces 439C Devu and Partitioning of the Array
- 在windows7中安装xgboost
- Silex:基于Symfony组件的微型框架简介
- idea 创建的maven+spring+mybatis项目整合 报错无法创建bean
- HDU 3366
- Err: 1040: Too many connections 真正解决方法