1.依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.25.0</version>
</dependency>
2.yml
spring:
data:
redis:
database: 0
host: 10.43.119.175
port: 6379
password: 123456
timeout: 5s
connect-timeout: 5s
redis:
redisson:
codec: org.redisson.codec.JsonJacksonCodec
threads: 16
nettyThreads: 32
transportMode: "NIO"
lockWatchdogTimeout: 30000
keepPubSubOrder: true
singleServerConfig:
address: "redis://10.43.119.175:6379"
password: 123456
database: 0
clientName: null
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
connectionMinimumIdleSize: 24
connectionPoolSize: 64
subscriptionsPerConnection: 5
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
dnsMonitoringInterval: 5000
idleConnectionTimeout: 10000
3.工具类
@Component
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class RedisService {
private final RedissonClient redissonClient;
public <T> void setString(String key, T value) {
RBucket<T> bucket = redissonClient.getBucket(key);
bucket.set(value);
}
public <T> void setString(String key, T value, long timeout, TimeUnit timeUnit) {
RBucket<T> bucket = redissonClient.getBucket(key);
bucket.set(value, timeout, timeUnit);
}
public <T> T getString(String key) {
RBucket<T> bucket = redissonClient.getBucket(key);
return bucket.get();
}
public <T> boolean addToHash(String key, Object field, T value) {
RMap<Object, T> hash = redissonClient.getMap(key);
return hash.fastPut(field, value);
}
public <T> boolean addToHash(String key, Object field, T value, long timeout, ChronoUnit timeUnit) {
RMap<Object, T> hash = redissonClient.getMap(key);
boolean fastPut = hash.fastPut(field, value);
boolean expire = hash.expire(Instant.now().plus(timeout, timeUnit));
return fastPut && expire;
}
public <T> T getFromHash(String key, Object field) {
RMap<Object, T> hash = redissonClient.getMap(key);
return hash.get(field);
}
public <T> Map<Object, T> getFromHash(String key) {
RMap<Object, T> hash = redissonClient.getMap(key);
return hash.readAllMap();
}
public <T> boolean updateToHash(String key, Object field, T value) {
RMap<Object, T> hash = redissonClient.getMap(key);
return hash.fastReplace(field, value);
}
public <T> long removeFromHash(String key, T... hashKeys) {
RMap<Object, T> hash = redissonClient.getMap(key);
return hash.fastRemove(hashKeys);
}
public <T> boolean addToList(String key, T value) {
RList<T> list = redissonClient.getList(key);
return list.add(value);
}
public <T> boolean addToList(String key, List<T> value) {
RList<T> list = redissonClient.getList(key);
return list.addAll(value);
}
public <T> boolean addToList(String key, T value, long timeout, ChronoUnit timeUnit) {
RList<T> list = redissonClient.getList(key);
list.add(value);
return list.expire(Instant.now().plus(timeout, timeUnit));
}
public <T> List<T> getFromList(String key, int start, int end) {
RList<T> list = redissonClient.getList(key);
return list.range(start, end);
}
public <T> List<T> getFromList(String key) {
RList<T> list = redissonClient.getList(key);
return list.readAll();
}
public void removeListLeft(String key) {
RList<Object> list = redissonClient.getList(key);
list.fastRemove(0);
}
public void removeListRight(String key) {
RList<Object> list = redissonClient.getList(key);
list.fastRemove(list.size() - 1);
}
public void removeFromList(String key, int index) {
RList<Object> list = redissonClient.getList(key);
list.fastRemove(index);
}
public <T> boolean removeFromList(String key, T value) {
RList<T> list = redissonClient.getList(key);
return list.removeIf(o -> o.equals(value));
}
public <T> boolean addToSet(String key, T value) {
RSet<T> set = redissonClient.getSet(key);
return set.add(value);
}
public <T> boolean addToSet(String key, T value, long timeout, ChronoUnit timeUnit) {
RSet<T> set = redissonClient.getSet(key);
boolean add = set.add(value);
boolean expire = set.expire(Instant.now().plus(timeout, timeUnit));
return add && expire;
}
public <T> boolean addToSet(String key, List<T> values) {
RSet<T> set = redissonClient.getSet(key);
return set.addAll(values);
}
public <T> boolean addToSet(String key, List<T> values, long timeout, ChronoUnit timeUnit) {
RSet<T> set = redissonClient.getSet(key);
set.addAllCounted(values);
return set.expire(Instant.now().plus(timeout, timeUnit));
}
public <T> Set<T> getFromSet(String key) {
RSet<T> set = redissonClient.getSet(key);
return set.readAll();
}
public <T> void removeFromSet(String key, List<T> values) {
RSet<T> set = redissonClient.getSet(key);
values.forEach(set::remove);
}
public <T> boolean removeFromSet(String key, T value) {
RSet<T> set = redissonClient.getSet(key);
return set.remove(value);
}
public <T> void addToZSet(String key, T value, double score) {
RScoredSortedSet<T> sortedSet = redissonClient.getScoredSortedSet(key);
sortedSet.add(score, value);
}
public <T> void addToZSet(String key, T value, double score, long timeout, ChronoUnit timeUnit) {
RScoredSortedSet<T> sortedSet = redissonClient.getScoredSortedSet(key);
sortedSet.add(score, value);
sortedSet.expire(Instant.now().plus(timeout, timeUnit));
}
public <T> Set<Object> getFromZSet(String key, int start, int end) {
RScoredSortedSet<T> sortedSet = redissonClient.getScoredSortedSet(key);
return new HashSet<>(sortedSet.valueRange(start, end));
}
public <T> void removeFromZSet(String key, List<T> values) {
RScoredSortedSet<T> sortedSet = redissonClient.getScoredSortedSet(key);
sortedSet.removeAll(values);
}
public <T> void removeFromZSet(String key, T value) {
RScoredSortedSet<T> sortedSet = redissonClient.getScoredSortedSet(key);
sortedSet.remove(value);
}
public boolean exists(String key) {
return redissonClient.getBucket(key).isExists();
}
public boolean remove(String key) {
long delete = redissonClient.getKeys().delete(key);
return delete > 0;
}
public boolean expire(String key, long timeout, ChronoUnit timeUnit) {
return redissonClient.getBucket(key).expire(Instant.now().plus(timeout, timeUnit));
}
public Long getExpire(String key) {
return redissonClient.getBucket(key).getExpireTime();
}
public long increment(String key, long delta) {
RAtomicLong atomicLong = redissonClient.getAtomicLong(key);
return atomicLong.addAndGet(delta);
}
public long decrement(String key, long delta) {
RAtomicLong atomicLong = redissonClient.getAtomicLong(key);
return atomicLong.decrementAndGet();
}
public double increment(String key, double delta) {
RAtomicDouble atomicDouble = redissonClient.getAtomicDouble(key);
return atomicDouble.addAndGet(delta);
}
public double decrement(String key, double delta) {
RAtomicDouble atomicDouble = redissonClient.getAtomicDouble(key);
return atomicDouble.decrementAndGet();
}
}
4.测试
@RestController
@RequestMapping("/redission")
@Slf4j
public class RedissionAPI {
@Resource
private RedisService redisService;
private static final String STRING_KEY = "redis:string";
private static final String LIST_KEY = "redis:list";
private static final String SET_KEY = "redis:set";
private static final String HASH_KEY = "redis:hash";
@PostMapping("/redis1")
public void redisStringTest() {
log.info("Redis String 数据类型测试");
redisService.setString(STRING_KEY, LocalDateTime.now().toString());
String redisGetStringData = redisService.getString(STRING_KEY);
log.info("Redis String Get:{}", redisGetStringData);
boolean remove = redisService.remove(STRING_KEY);
log.info("Redis String Remove:{}", remove);
redisGetStringData = redisService.getString(STRING_KEY);
log.info("Redis String Get After Delete:{}", redisGetStringData);
}
@PostMapping("/redis2")
public void redisListTest() {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
list.add(LocalDateTime.now().getNano());
ThreadUtil.sleep(5);
}
boolean addItemResult = redisService.addToList(LIST_KEY, LocalDateTime.now().getNano());
redisService.getFromList(LIST_KEY)
.forEach(s -> log.info("Redis List Get After Add Item:{}", s));
boolean addListDataResult = redisService.addToList(LIST_KEY, list);
log.info("Redis List Add List:{}", addListDataResult);
redisService.getFromList(LIST_KEY)
.forEach(s -> log.info("Redis List Get After Add List:{}", s));
redisService.getFromList(LIST_KEY, 0, 2)
.forEach(s -> log.info("Redis List Get By Index:{}", s));
log.info("Redis List Size Before Delete:{}", redisService.getFromList(LIST_KEY).size());
redisService.removeFromList(LIST_KEY, 0);
log.info("Redis List Size After Delete:{}", redisService.getFromList(LIST_KEY).size());
boolean remove = redisService.remove(LIST_KEY);
log.info("Redis List Remove:{}", remove);
}
public void redisSetTest() {
log.info("Redis Set 数据类型测试");
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
list.add(LocalDateTime.now().getNano());
ThreadUtil.sleep(5);
}
boolean addItemResult = redisService.addToSet(SET_KEY, LocalDateTime.now().getNano());
log.info("Redis Set Add item:{}", addItemResult);
redisService.getFromSet(SET_KEY)
.forEach(s -> log.info("Redis Set Get After Add Item:{}", s));
boolean addListDataResult = redisService.addToSet(SET_KEY, list);
log.info("Redis Set Add List:{}", addListDataResult);
redisService.getFromSet(SET_KEY)
.forEach(s -> log.info("Redis Set Get After Add List:{}", s));
log.info("Redis Set Size Before Delete:{}", redisService.getFromSet(SET_KEY).size());
redisService.removeFromSet(SET_KEY, LocalDateTime.now().getNano());
log.info("Redis Set Size After Delete:{}", redisService.getFromSet(SET_KEY).size());
boolean remove = redisService.remove(SET_KEY);
log.info("Redis Set Remove:{}", remove);
}
public void redisHashTest() {
log.info("Redis Hash 数据类型测试");
Integer key = LocalDateTime.now().getNano();
boolean addItemResult = redisService
.addToHash(HASH_KEY, key, LocalDateTime.now().toString());
log.info("Redis Hash Add item:{}", addItemResult);
redisService.getFromHash(HASH_KEY)
.forEach((k, v) -> log.info("Redis Hash Get After Add Item:{} - {}", k, v.toString()));
log.info("Redis Hash Get By Key:{}", redisService.getFromHash(HASH_KEY, key).toString());
log.info("Redis Hash Size Before Delete:{}", redisService.getFromHash(HASH_KEY).size());
redisService.removeFromHash(HASH_KEY, key);
log.info("Redis Hash Size After Delete:{}", redisService.getFromHash(HASH_KEY).size());
boolean remove = redisService.remove(HASH_KEY);
log.info("Redis Hash Remove:{}", remove);
}
}
5.布隆过滤器
public <T> RBloomFilter<T> bloomFilterInit(String filterName, Long expectedInsertions, Double falseProbability) {
RBloomFilter<T> bloomFilter = redissonClient.getBloomFilter(filterName);
bloomFilter.tryInit(expectedInsertions, falseProbability);
return bloomFilter;
}
public <T> boolean bloomFilterContains(RBloomFilter<T> bloomFilter, T item) {
return bloomFilter.contains(item);
}
public <T> void addItemToBloomFilter(RBloomFilter<T> bloomFilter, T item) {
bloomFilter.add(item);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律