龙之队|如何使用redis获取自增序列号

前言Redis作为时下热门的缓存数据库 , 由于单线程、直接存取与内存中 , 所以速度很快很高效 。 redis的使用场景也非常多样化 , 常见的是作为优秀的缓存中间件 , 减轻数据库压力 。 下面就以springBoot和SpringMvc为例子来介绍一下使用Redis获取自增序列号 。
项目实例SpringBoot1.pom文件引入springBoot有对redis的封装插件 , 直接按以下引入即可:
org.springframework.bootspring-boot-starter-data-redis2.yml或者properties配置redis连接的相关信息
#redisspring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.timeout=3000spring.redis.password=shit3.添加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获取自增序列号】redis.clientsjedis2.2.12.redis连接配置
redis.host=127.0.0.1redis.port=6379redis.maxWait=1000000redis.password=shitredis.maxIdle=300redis.maxTotal=600003.在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;}}


推荐阅读