【redis】使用redis RedisAtomicLong生成自增的ID值
本文介紹在spring+redis組合時,使用redis的RedisAtomicLong生成自增的ID值。
1、自增ID生成類
RedisSequenceFactory是一個簡單封裝類,用於使用redisTemplate生成自增ID值。程式碼如下:
package cn.landsem.cache.redis;
import java.io.Serializable;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
public class RedisSequenceFactory {
@Autowired
RedisTemplate<String, Serializable> mRedisTemp;
/**
* @Title: set
* @Description: set cache.
* @param key
* @param value
* @param expireTime
*/
public void set(String key,int value,Date expireTime) {
RedisAtomicLong counter = new RedisAtomicLong(key, mRedisTemp.getConnectionFactory());
counter.set(value);
counter.expireAt(expireTime);
}
/**
* @Title: set
* @Description: set cache.
* @param key
* @param value
* @param timeout
* @param unit
*/
public void set(String key,int value,long timeout,TimeUnit unit) {
RedisAtomicLong counter = new RedisAtomicLong(key, mRedisTemp.getConnectionFactory());
counter.set(value);
counter.expire(timeout, unit);
}
/**
* @Title: generate
* @Description: Atomically increments by one the current value.
* @param key
* @return
*/
public long generate(String key) {
RedisAtomicLong counter = new RedisAtomicLong(key, mRedisTemp.getConnectionFactory());
return counter.incrementAndGet();
}
/**
* @Title: generate
* @Description: Atomically increments by one the current value.
* @param key
* @return
*/
public long generate(String key,Date expireTime) {
RedisAtomicLong counter = new RedisAtomicLong(key, mRedisTemp.getConnectionFactory());
counter.expireAt(expireTime);
return counter.incrementAndGet();
}
/**
* @Title: generate
* @Description: Atomically adds the given value to the current value.
* @param key
* @param increment
* @return
*/
public long generate(String key,int increment) {
RedisAtomicLong counter = new RedisAtomicLong(key, mRedisTemp.getConnectionFactory());
return counter.addAndGet(increment);
}
/**
* @Title: generate
* @Description: Atomically adds the given value to the current value.
* @param key
* @param increment
* @param expireTime
* @return
*/
public long generate(String key,int increment,Date expireTime) {
RedisAtomicLong counter = new RedisAtomicLong(key, mRedisTemp.getConnectionFactory());
counter.expireAt(expireTime);
return counter.addAndGet(increment);
}
}
2、RedisTemplate配置
RedisTemplate在基於java的配置類中進行配置,主要程式碼如下:
/**
* @Title: getDefaultRedisTemplate
* @Description: Get a default redis cache template.
* @return
*/
@Bean
public RedisTemplate<String, Serializable> getDefaultRedisTemplate(
RedisConnectionFactory cf,RedisSerializer<?> rs) {
RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<String, Serializable>();
redisTemplate.setConnectionFactory(cf);
redisTemplate.setDefaultSerializer(rs);//Use jboss serialization
redisTemplate.setKeySerializer(new StringRedisSerializer());//Use String serialization.
return redisTemplate;
}
3、使用測試
如下為生成一個自增ID,該自增ID快取的key為“hello”,並且該快取在當天23:59:59:999時會自動過期,過期後會重置為0。主要的原始碼如下:
/**
* @Title: getTodayEndTime
* @Description: Get the cache expire time.
* @return
*/
private static Date getTodayEndTime() {
Calendar todayEnd = Calendar.getInstance();
todayEnd.set(Calendar.HOUR_OF_DAY, 23);
todayEnd.set(Calendar.MINUTE, 59);
todayEnd.set(Calendar.SECOND, 59);
todayEnd.set(Calendar.MILLISECOND, 999);
return todayEnd.getTime();
}
/**
* The message sequence key.
*/
public static final String sMsgSequenceKeyFormat = "hello";
@Autowired
private RedisSequenceFactory mRedisSequenceFactory;
public void test() {
long v = mRedisSequenceFactory.generate(sMsgSequenceKeyFormat,getTodayEndTime())
}
相關文章
- Laravel 中使用 Redis 生成自增主鍵LaravelRedis
- Redis實現sequence功能自增idRedis
- 如何使用資料庫和Redis開發各系統獨立的自增ID生成器資料庫Redis
- 利用 Redis 生成序列號的功能實現編號自增Redis
- 如何實現Redis裡的自增ID計數器Redis
- Laravel 結合 Redis 生成訂單號 (年月日+6 位自增)LaravelRedis
- 【Azure Redis 快取 Azure Cache For Redis】使用Redis自帶redis-benchmark.exe命令測試Azure Redis的效能Redis快取
- 基於redis的分散式ID生成器Redis分散式
- VideoOS 後端對Redis的使用IDE後端Redis
- Redis的使用Redis
- redis(二)redis概述與jedis的使用Redis
- Redis鍵值設計Redis
- PHP 對 Redis key 值的操作PHPRedis
- Laravel 自增瀏覽數實現(資料庫 + Redis)Laravel資料庫Redis
- select @@Identity 返回自增主鍵的值IDE
- Redis的使用(二)Redis
- Redis系列24:Redis使用規範Redis
- Redis 高階特性 Redis Stream使用Redis
- Redis在.net中的使用(5)Redis持久化Redis持久化
- Java Redis系列2 (redis的安裝與使用+redis持久化的實現))JavaRedis持久化
- redis之(二十一)redis之深入理解Spring Redis的使用RedisSpring
- Redis在.net中的使用(2).net專案中的Redis使用Redis
- windows下redis設定redis開機自啟動WindowsRedis
- php 自增賦值PHP賦值
- MongoDB和Redis的使用MongoDBRedis
- Redis在.net中的使用(6)Redis併發鎖Redis
- Laravel 使用 RedisLaravelRedis
- Redis基本使用Redis
- Lumen使用RedisRedis
- PHP使用redisPHPRedis
- redis 使用案例Redis
- mysql獲取指定表當前自增id值MySql
- redis自學(46)鍵值設計Redis
- .Net使用Redis詳解之ServiceStack.RedisRedis
- 【redis】redis的bind配置Redis
- Redis在.net中的使用(1)下載安裝RedisRedis
- 【Redis】Redis的操作命令(一)——Redis Key命令Redis
- redis安全性很高,但是如何訪問redis中其他專案的鍵值?Redis