ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Redis BotManager [![](https://img.shields.io/badge/simple--robot-module-green)](https://github.com/ForteScarlet/simple-robot-core) [![](https://img.shields.io/maven-central/v/love.forte.simple-robot-module/mod-redis-botmanger)](https://search.maven.org/artifact/love.forte.simple-robot-module/mod-redis-botmanger) ## **介绍** 有时候,你并不想每次修改bot账号都要去修改配置文件 有时候,你可能使用的集群搭载的Bot服务器,并且希望集群下的simbot程序能够共享Bot注册信息 有时候...... Redis BotManager模组可以为simbot程序提供一个新的使用Redis管理的`BotManager`实例来替代程序中默认的`BotManager`,实现通过Redis来管理Bot的注册信息。 >[info] 模组默认使用Jedis-3.2.0与Redis进行交互。 ## **使用** 首先保证核心版本为`1.12`及以上。 > 关于核心的判断,参考文档的章节:**核心版本与组件如何升级核心**。 版本参考:[![](https://img.shields.io/maven-central/v/love.forte.simple-robot-module/mod-redis-botmanger)](https://search.maven.org/artifact/love.forte.simple-robot-module/mod-redis-botmanger) 导入依赖(以maven为例): ```xml <dependency> <groupId>love.forte.simple-robot-module</groupId> <artifactId>mod-redis-botmanger</artifactId> <version>${version}</version> </dependency> ``` 然后在配置文件中配添加置,完整配置内容如下: ```properties ### 省略掉其他... ### #redis的ip simbot.module.redis.ip= #redis的port simbot.module.redis.port= #redis的password simbot.module.redis.password= #连接的数据库,默认为0 simbot.module.redis.database= #最大连接 simbot.module.redis.maxTotal= #最大空闲 simbot.module.redis.masIdle= #最小空闲 simbot.module.redis.minIdle= #最大等待时间 simbot.module.redis.maxWait= #从jedis连接池获取连接时,校验并返回可用的连接 simbot.module.redis.testBorrow= #把连接放回jedis连接池时,校验并返回可用的连接 simbot.module.redis.testReturn= #创建jedis连接时,校验并返回可用的连接 simbot.module.redis.testCreate= #连接耗尽的时候,是否阻塞,false会抛出异常,true阻塞直到超时。默认为true。 simbot.module.redis.blockWhenEx #连接超时时长 simbot.module.redis.timeOut= #redis中缓存的key,默认为'simbot:bot:manager' simbot.module.redis.key= ``` 所有的配置均存在默认值,一般只需要配置一下redis的地址就好了。例如: ```properties #redis的ip simbot.module.redis.ip=127.0.0.1 #redis的port simbot.module.redis.port=6379 ``` 配置完成后,直接启动即可。你可以通过`BotManager`的`registerBot(...)`方法观察到redis的变化,然后删除掉配置文件中的账号信息再启动一次试试吧。 ## **其他** 如果你想要通过代码配置,则在一个可以被扫描到的位置创建一个RedisBotManagerConfiguraiton类(名称任意),并注入一个优先级**至少**为`PriorityConstant.SECOND_LAST`的`RedisParameters`实例。 例如: ```java @Beans public class TestRedisConfiguration { // 优先级至少为PriorityConstant.SECOND_LAST,即倒数第二 @Beans(priority = PriorityConstant.SECOND_LAST) public RedisParameters getRedisParameters(){ RedisParameters rp = new RedisParameters(); // 配置信息.... rp.setXxx(....) return rp; } } ``` 如果想要修改RedisBotManager中对于Redis的交互方面的代码,可以注入一个优先级**至少**为`PriorityConstant.SECOND_LAST`的`BotManagerRedisOperator`实例。 例如: ```java /** * 优先级至少为PriorityConstant.SECOND_LAST,即倒数第二 * @param jedisPool jedisPool, 你可以用过依赖工厂自动获得 * @param redisParameters redisParameters,你可以用过依赖工厂自动获得 */ @Beans(priority = PriorityConstant.SECOND_LAST) public BotManagerRedisOperator getDefaultRedisOperator(JedisPool jedisPool, RedisParameters redisParameters){ // 获取BotManagerRedisOperator 的实例对象并返回... return // something } ``` 基于上述同理,你可以进行覆盖的依赖有(除了`BotManager`实例):`RedisParameters`、`BotManagerRedisOperator`、`JedisPool` 你可能会用到的一些可注入的依赖(除了上述依赖以外):`ConfigProperties`、`PathAssembler`、`VerifyFunction`