APIJSON icon indicating copy to clipboard operation
APIJSON copied to clipboard

apijson json支持redis、rediSQL

Open cloudAndMonkey opened this issue 2 years ago • 5 comments

Description

丰富apijson周边 json 转 sql语句查询redis数据库表 json操作redis语句

cloudAndMonkey avatar Jan 31 '23 07:01 cloudAndMonkey

最近比较忙, 上次改了结构,还没测好 等忙完,再提交

cloudAndMonkey avatar Jan 31 '23 07:01 cloudAndMonkey

@TommyLemon 请问你上次改造了 APIJSON ACCESS、Request缓存实现. 如果采用redis存储, 重启能自动识别 数据有变更, 更新缓存? 比如 每条数据md5

cloudAndMonkey avatar Feb 02 '23 08:02 cloudAndMonkey

@cloudAndMonkey 重启时清掉所有 Redis 缓存,不过目前这句总是抛异常,没有达到效果 https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoApplication.java#L85-L89

目前支持自动移除一些缓存 https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java#L260-L264

但是不够全面,只支持同表名、同条件的 SQL,目前缓存的所有 key 都是 SQL 语句,可以根据表名来清楚所有关于某张表的缓存。 1.判断 SQL 字符串中出现的表名,不方便做到精准又高性能; 2.根据 SQLConfig 把所有 SQL 与关联主副表的关系放到一个 Map<String sql, Set<String> tableNames> sqlTableNameMap 或 Map<String tableName, Set<String> sqls> tableNameSQLMap 然后读这个配置来 removeCache(sql)。

主表名:SQLConfig.getTable 所有副表名: 遍历 config.getJoinList(),每个 Join.getTable

TommyLemon avatar Feb 02 '23 09:02 TommyLemon

@cloudAndMonkey 重启时清掉所有 Redis 缓存,不过目前这句总是抛异常,没有达到效果 https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoApplication.java#L85-L89

目前支持自动移除一些缓存 https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java#L260-L264

但是不够全面,,只支持同表名、同条件的 SQL,目前缓存的所有 key 都是 SQL 语句,可以根据表名来清楚所有关于某张表的缓存。 1.判断 SQL 字符串中出现的表名,不方便做到精准又高性能; 2.根据 SQLConfig 把所有 SQL 与关联主副表的关系放到一个 Map<String sql, Set tableNames> sqlTableNameMap 或 Map<String tableName, Set sqls> tableNameSQLMap 然后读这个配置来 removeCache(sql)。

主表名:SQLConfig.getTable 所有副表名: 遍历 config.getJoinList(),每个 Join.getTable

嗯嗯,等我redis测试的时候,一起测一下

cloudAndMonkey avatar Feb 02 '23 10:02 cloudAndMonkey

@TommyLemon 累死我了, redis、redSQL 支持 单节点、sentinel、cluster模式, 我已经测完了

{
      "@datasource": "redisCluster",
      "REDIS_STRING":{
          "key": "b",
          "value": "b",
          "option_method": "set"
      },
     "tag": "REDIS_STRING",
     "format": true
}

 "@datasource": "redisCluster", // cluster模式
 "@datasource": "redisSentinel", // sentinel模式
 "@datasource": "redisSingle", // 单节点模式

我找个时间提交, 然后把 命令 放到autoapi 做为模版

cloudAndMonkey avatar Mar 02 '23 11:03 cloudAndMonkey