1--依赖
org.springframework.boot spring-boot-starter-data-redisorg.apache.commons commons-pool2
2--账号配置
#配置springCache的实现为redis
cache:
type: redis
#redis缓存配置
redis:
host: ip
port: 端口
password: 账号
timeout: 最大超时时间
pool:
max-wait: -1
max-idle: 10
min-idle: 0
3--配置消息订阅与发布及Redis过期时间
@Configuration
public class RedisCacheManagerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter1,
MessageListenerAdapter listenerAdapter2) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter1, new PatternTopic("频道1"));
container.addMessageListener(listenerAdapter2, new PatternTopic("频道2"));
return container;
}
//频道一 方法接受的函数为你的频道类,return 为你的频道类和具体方法
@Bean
MessageListenerAdapter listenerAdapter1(SendSmsUtil receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
//例子2
@Bean
MessageListenerAdapter listenerAdapter2(SendSmsUtil receiver) {
return new MessageListenerAdapter(receiver, "receiveMessageChat");
}
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
@Bean
public KeyGenerator keyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(".");
sb.append(method.getName());
for (Object obj : params) {
sb.append("#");
sb.append(obj == null ? "" : obj.toString());
}
return sb.toString();
};
}
@Bean
@Primary
public RedisCacheManager cacheManager1Month(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = instanceConfig(3600L * 24 * 30);
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.transactionAware()
.build();
}
private RedisCacheConfiguration instanceConfig(Long ttl) {
Jackson2JsonRedisSerializer
4--接受发送频道类
对指定发送消息
stringRedisTemplate.convertAndSend(Constant.REDIS_CHANNEL_CHAT, message);
//在普通类中,可以直接使用@Resource注入
//在WebSocket中使用这种注入方式
private StringRedisTemplate stringRedisTemplate = SpringUtils.getBean(RedisUtil.class).getStringRedisTemplate();
@Component
public class SendSmsUtil {
//这里的message要以Json的形式接受,接收到了以后可以对它进行 JsonObject转化为类
public void receiveMessage(String message) {
new WxWebSocket().sendMessageToUser(message);
}
}
6--工具类
@Data
@Log4j2
@Component
public class RedisUtil {
@Resource
private RedisTemplate redisTemplate;
@Resource
private StringRedisTemplate stringRedisTemplate;
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
log.error("redis set value exception:{}", e);
return false;
}
}
public boolean setex(String key, Object value, long expire) {
try {
//TimeUnit.SECONDS指定类型为秒
redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
return true;
} catch (Exception e) {
log.error("redis set value and expire exception:{}", e);
return false;
}
}
public boolean expire(String key, long expire) {
try {
//这儿没有ops什么的是因为每种数据类型都能设置过期时间
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
return true;
} catch (Exception e) {
log.error("redis set key expire exception:{}", e);
return false;
}
}
public long ttl(String key) {
return redisTemplate.getExpire(key);
}
public void del(String... keys) {
if (keys != null && keys.length > 0) {
redisTemplate.delete((Collection) CollectionUtils.arrayToList(keys));
}
}
public long incrBy(String key, long step) {
return redisTemplate.opsForValue().increment(key, step);
}
public boolean setnx(String key, Object value) {
return redisTemplate.opsForValue().setIfAbsent(key, value);
}
public boolean setnxAndExpire(String key, Object value, long expire) {
return redisTemplate.opsForValue().setIfAbsent(key, value, expire, TimeUnit.SECONDS);
}
public Object getAndSet(String key, Object value) {
return redisTemplate.opsForValue().getAndSet(key, value);
}
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
public long llen(String key) {
return redisTemplate.opsForList().size(key);
}
public Object lgetByIndex(String key, long index) {
try {
return redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
log.error("redis lgetByIndex error,key:{},index:{}exception:{}", key, index, e);
return null;
}
}
public boolean lrpush(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
log.error("redis lrpush error,key:{},value:{}exception:{}", key, value, e);
return false;
}
}
public boolean lrpush(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0)
expire(key, time);
return true;
} catch (Exception e) {
log.error("redis lrpush error,key:{},value:{},timeL{},exception:{}", key, value, time, e);
return false;
}
}
public boolean lrpush(String key, List



