龙之队|如何使用redis获取自增序列号
前言Redis作为时下热门的缓存数据库 , 由于单线程、直接存取与内存中 , 所以速度很快很高效 。 redis的使用场景也非常多样化 , 常见的是作为优秀的缓存中间件 , 减轻数据库压力 。 下面就以springBoot和SpringMvc为例子来介绍一下使用Redis获取自增序列号 。
项目实例SpringBoot1.pom文件引入springBoot有对redis的封装插件 , 直接按以下引入即可:
2.yml或者properties配置redis连接的相关信息
#redisspring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.timeout=3000spring.redis.password=shit
3.添加redis配置类 , 可以实例化redisTemplate , 设置缓存失效时间等 , 以及redis连接池等 , 这里从简了
@Configurationpublic class RedisConfig {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory factory) {StringRedisTemplate template = new StringRedisTemplate(factory);//序列化方式Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);template.setValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}}
4.按照key获取递增的序列号
/*** 获取递增的序列号** @param prefix 生成序列号的前缀* @return*/public String getIncre(String prefix) {//序列号前缀加特定标识 , 如系统模块名之类的 防止重复String key = "SCM_DAMLL" + prefix;String increResult = null;try {//如果该key不存在 会自动创建 , 值为第二个参数delta//最终调用的还是jedis的incrBy(byte[] key, long value)方法Long increNum = redisTemplate.opsForValue().increment(key, 1);//不足补位increResult = prefix + String.format("%1$06d", increNum);} catch (Exception e) {logger.infor("获取序列号失败");/*这里可以根据需求手动生成一个不重复的单号 ,* */}return increResult;}
springMVCspringMVC通常引入jedis包来进行redis相关的操作 , 和上诉spring-boot-starter-data-redis相比 , jedis封装度更低 , 更加原生态 , 操作方式和一些方法更接近于redis命令操作 。 1.pom文件引入
【龙之队|如何使用redis获取自增序列号】
2.redis连接配置
redis.host=127.0.0.1redis.port=6379redis.maxWait=1000000redis.password=shitredis.maxIdle=300redis.maxTotal=60000
3.在spring配置文件中实例化对象
4.编写一个redis操作的工具类
@Componentpublic class JedisUtil {protected final static Logger logger = Logger.getLogger(JedisUtil.class);private static JedisPool jedisPool;@Autowired(required = true)public void setJedisPool(JedisPool jedisPool) {JedisUtil.jedisPool = jedisPool;}/*** 获取自增的序列号** @param key redis主键* @return*/public static String getIncreNum(String key) {String value = http://kandian.youth.cn/index/null;Jedis jedis = null;try {jedis = jedisPool.getResource();value = jedis.incrBy(key, 1).toString();} catch (Exception e) {logger.warn("getList " + key + " = " + value);} finally {jedisPool.returnResource(jedis);}return value;}}
推荐阅读
- 徐峥|徐峥年初被23家电影公司联名“封杀”,上万人签名抵制,现状如何
- 游戏葡萄|七年磨一剑的任天堂,如何用美术诠释游戏?
- 智能城市崛起,看智能化如何定义未来之城
- 萍姐姐调侃体育|郭艾伦如何回应?国产第一后卫之争愈演愈烈,吴前爆发孙铭徽开挂
- 王者荣耀|李小龙皮肤如何搭配才最帅气,这个回城特效绝配,搭配特效秒变传说皮肤!
- 剖析爱奇艺积分体系,如何做留存和转化
- ZAKER生活|在俄避难的斯诺登,结局如何?,7年前曝光美国“棱镜计划”
- 周到|复盘上海德比首回合 上港如何破申花的密集防守
- 晴晴侃游戏|盗贼和狂暴战谁更适合呢,魔兽怀旧服咸鱼剑近战该如何选择
- 王者荣耀|王者荣耀:不知道如何玩好射手?S21赛季全射手出装铭文合集送给你!