redisson的上手教程
分四个步骤:1、添加依赖
2、配置类:读取redis地址信息、配置编码防止乱码、使用redissonClient来构造需要的方法
3、设置redis参数
4、引入redissonService应用于目标处
本文极度友好,直接复制使用
- 添加依赖
org.redisson
redisson-spring-boot-starter
3.11.5
com.alibaba
fastjson
1.2.47
- 添加配置类
1> :RedissonConfig,用于读取redis信息:ip、端口、密码、数据库
package com.xxx.redison;
import lombok.Data;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Data
public class RedissonConfig {
@Value("${spring.redisson.host}")
private String host;
@Value("${spring.redisson.port}")
private String port;
@Value("${spring.redisson.password}")
private String password;
@Bean(name = "redisson")
public RedissonClient getRedisson(){
Config config = new Config();
config.setCodec(new FastJsonCodec());
config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password);
//添加主从配置
// config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});
return Redisson.create(config);
}
}
2>设置编码:FastJsonCodec
package com.xxx.redison;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.ByteBufInputStream;
import io.netty.buffer.ByteBufOutputStream;
import org.redisson.client.codec.baseCodec;
import org.redisson.client.protocol.Decoder;
import org.redisson.client.protocol.Encoder;
import java.io.IOException;
public class FastJsonCodec extends baseCodec {
private final Encoder encoder = in -> {
ByteBuf out = ByteBufAllocator.DEFAULT.buffer();
try {
ByteBufOutputStream os = new ByteBufOutputStream(out);
JSON.writeJSONString(os, in, SerializerFeature.WriteClassName);
return os.buffer();
} catch (IOException e) {
out.release();
throw e;
} catch (Exception e) {
out.release();
throw new IOException(e);
}
};
private final Decoder
3>编写api,可以自定义方法,自由发挥
package com.redis.demo.redisionconfig;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.*;
import org.redisson.config.Config;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service("redissonService")
public class RedissonService {
@Resource(name = "redisson")
private RedissonClient redissonClient;
public void getRedissonClient() throws IOException {
Config config = redissonClient.getConfig();
System.out.println(config.toJSON().toString());
}
public RBucket getRBucket(String objectName) {
RBucket bucket = redissonClient.getBucket(objectName);
return bucket;
}
public RMap getRMap(String objectName) {
RMap map = redissonClient.getMap(objectName);
return map;
}
public RSortedSet getRSortedSet(String objectName) {
RSortedSet sortedSet = redissonClient.getSortedSet(objectName);
return sortedSet;
}
public RScoredSortedSet getScoredSortedSet(String objectName) {
RScoredSortedSet scoredSortedSet = redissonClient.getScoredSortedSet(objectName);
return scoredSortedSet;
}
public RSet getRSet(String objectName) {
RSet rSet = redissonClient.getSet(objectName);
return rSet;
}
public RList getRList(String objectName) {
RList rList = redissonClient.getList(objectName);
return rList;
}
public RQueue getRQueue(String objectName) {
RQueue rQueue = redissonClient.getQueue(objectName);
return rQueue;
}
public RDeque getRDeque(String objectName) {
RDeque rDeque = redissonClient.getDeque(objectName);
return rDeque;
}
public RLock getRLock(String objectName) {
RLock rLock = redissonClient.getLock(objectName);
return rLock;
}
public RReadWriteLock getRWLock(String objectName) {
RReadWriteLock rwlock = redissonClient.getReadWriteLock(objectName);
return rwlock;
}
public RAtomicLong getRAtomicLong(String objectName) {
RAtomicLong rAtomicLong = redissonClient.getAtomicLong(objectName);
return rAtomicLong;
}
public RCountDownLatch getRCountDownLatch(String objectName) {
RCountDownLatch rCountDownLatch = redissonClient.getCountDownLatch(objectName);
return rCountDownLatch;
}
public boolean tryLock(String lockName, long leaseTime,long waitTime) {
RLock rLock = redissonClient.getLock(lockName);
boolean getLock = false;
try {
getLock = rLock.tryLock( waitTime,leaseTime, TimeUnit.SECONDS);
} catch (InterruptedException e) {
log.error("获取Redisson分布式锁[异常],lockName=" + lockName, e);
e.printStackTrace();
return false;
}
return getLock;
}
public void unlock(String lockName) {
redissonClient.getLock(lockName).unlock();
}
}
- 配置application
spring:
#redisson配置
redisson:
host: 192.168.2.162
port: 6379
password: 123456
database: 1
4.使用redis分布式锁
@Resouce
private RedisionService redissonService;
@Override
public void add(Map map) {
//尝试获取分布式锁
boolean lock = redissonService.tryLock(“自己定义分布式锁名称”, 30, 2);
//获取到之后操作
if (lock){
try {
RMap rMap = redissonService.getRMap(VIDEO_CONFIG);
rMap.clear();
rMap.putAll(map);
}finally {
//一定要释放锁
redissonService.unlock(VIDEO_CONFIG_LOCK);
}
}
}



