最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用redis獲取自增序列號實現(xiàn)方式

 更新時間:2023年12月07日 09:58:43   作者:留守的小柯基  
這篇文章主要介紹了使用redis獲取自增序列號實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

Redis作為時下熱門的緩存數(shù)據(jù)庫,由于單線程、直接存取與內(nèi)存中,所以速度很快很高效。redis的使用場景也非常多樣化,常見的是作為優(yōu)秀的緩存中間件,減輕數(shù)據(jù)庫壓力。

近期在項目中使用了redis獲取有序的序列號,作為業(yè)務(wù)單號,非常常見,手里的項目有springBoot也有SpringMvc ,所以在此做下總結(jié)

項目實例

1.SpringBoot

1.pom文件引入

springBoot有對redis的封裝插件,直接按以下引入即可:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.yml或者properties配置redis連接的相關(guān)信息

#redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.timeout=3000
spring.redis.password=shit

3.添加redis配置類,可以實例化redisTemplate,設(shè)置緩存失效時間等,以及redis連接池等,這里從簡了

@Configuration
public class RedisConfig {
	 
	 @Bean
	 public RedisTemplate<String, String> 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獲取遞增的序列號

@Configuration
public class RedisConfig {
	 
	 @Bean
	 public RedisTemplate<String, String> 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;
	 }
	 
	 
}

2.springMVC

springMVC通常引入jedis包來進行redis相關(guān)的操作,和上訴spring-boot-starter-data-redis相比,jedis封裝度更低,更加原生態(tài),操作方式和一些方法更接近于redis命令操作。

1.pom文件引入

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.2.1</version>
        </dependency>

2.redis連接配置

redis.host=127.0.0.1
redis.port=6379
redis.maxWait=1000000
redis.password=shit
redis.maxIdle=300
redis.maxTotal=60000

3.在spring配置文件中實例化對象

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"/> 
        <property name="maxActive" value="${redis.maxTotal}"/> 
        <property name="testOnBorrow" value="true"/> 
    </bean>

    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port}" type="int"/>
        <constructor-arg name="timeout" value="${redis.maxWait}"/>
        <constructor-arg name="password" value="${redis.password}"/>
    </bean>

4.編寫一個redis操作的工具類,

@Component
public 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 = 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;
	 }
}

總結(jié)

以上未考慮到redis集群的情況,常規(guī)生成序列號是夠用了,每次獲取序列號的時間也在1毫秒左右,非常高效,同時列出其他生成連續(xù)號段的方法。

1.取mysql自增主鍵id,每次插入前查詢當(dāng)前庫max(id) ,優(yōu)點:簡單,缺點:增加數(shù)據(jù)庫查詢次數(shù),高并發(fā)考慮maxid與實際值不一致情況

2.創(chuàng)建序列號的表,存儲序列值,通過添加版本號字段或加鎖控制寫入 優(yōu)點:準(zhǔn)確 缺點:效率低

好了,這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis緩存IO模型的演進教程示例精講

    Redis緩存IO模型的演進教程示例精講

    這篇文章主要為大家介紹了Redis線程IO模型演進的教程示例精講,有需要朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • 詳解redis集群的三種方式

    詳解redis集群的三種方式

    Redis三種集群方式分別是主從復(fù)制,哨兵模式,Cluster集群,這篇文章主要介紹了redis集群的三種方式,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • React?組件的常用生命周期函數(shù)匯總

    React?組件的常用生命周期函數(shù)匯總

    這篇文章主要介紹了React?組件的常用生命周期函數(shù)匯總,組件的生命周期有助于理解組件的運行方式、完成更復(fù)雜的組件功能、分析組件錯誤原因等
    2022-08-08
  • Redis之緩存擊穿、穿透、雪崩問題及處理

    Redis之緩存擊穿、穿透、雪崩問題及處理

    文章詳細介紹了緩存擊穿、緩存穿透和緩存雪崩的概念、觸發(fā)條件、典型場景、可能后果及解決策略,強調(diào)了緩存設(shè)計中需考慮的多個方面,包括緩存策略、系統(tǒng)一致性、異常處理和優(yōu)化措施,通過合理設(shè)置TTL、使用分布式鎖、預(yù)熱緩存、邏輯過期刷新、布隆過濾器等多種方法
    2026-04-04
  • 使用 Redis 流實現(xiàn)消息隊列的代碼

    使用 Redis 流實現(xiàn)消息隊列的代碼

    這篇文章主要介紹了使用 Redis 流實現(xiàn)消息隊列,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Redis cluster集群模式的原理解析

    Redis cluster集群模式的原理解析

    這篇文章主要介紹了Redis cluster集群模式的原理解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 安裝Redis就那么幾步,很簡單

    安裝Redis就那么幾步,很簡單

    Redis是一種非關(guān)系型數(shù)據(jù)庫(NoSQL),NoSQL是以key-value的形式存儲,和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫不一樣,不一定遵循傳統(tǒng)數(shù)據(jù)庫的一些基本要求,本文重點給大家介紹安裝Redis的步驟,需要的朋友參考下吧
    2018-11-11
  • Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用

    Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用

    本文主要介紹了Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Redis集群數(shù)據(jù)清理的操作指南

    Redis集群數(shù)據(jù)清理的操作指南

    本文介紹了Redis集群全量數(shù)據(jù)清理的操作流程,包括檢查數(shù)據(jù)、腳本清理步驟、結(jié)果確認及注意事項,建議在低峰期進行并備份數(shù)據(jù),確保上線環(huán)境干凈,需要的朋友可以參考下
    2025-10-10
  • 使用Redis作為異步隊列之原理、實現(xiàn)及實踐過程

    使用Redis作為異步隊列之原理、實現(xiàn)及實踐過程

    這篇文章主要介紹了使用Redis作為異步隊列之原理、實現(xiàn)及實踐過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07

最新評論

武平县| 贵阳市| 砀山县| 天镇县| 启东市| 建瓯市| 楚雄市| 岑巩县| 广安市| 石首市| 崇义县| 禹州市| 泗水县| 宁国市| 来凤县| 盖州市| 怀来县| 潞西市| 湘潭市| 密云县| 弥勒县| 松江区| 津南区| 册亨县| 临江市| 泾阳县| 邵东县| 延边| 镇远县| 乐至县| 永清县| 喜德县| 苏尼特左旗| 石景山区| 开阳县| 东乌珠穆沁旗| 海门市| 周口市| 张掖市| 穆棱市| 清新县|