请问RedisPlugin中的参数cacheName是什么意思。

redis中是key-value的方法,请问创建中的cacheName怎么理解。例如:我有用户的缓存,菜单的缓存等,用户的key和菜单的key应该会重复,怎么处理?

评论区

JFinal

2016-10-12 10:30

大规模系统会使用多个 redis 实例或同一个 redis 中的不同 db 来做不同模块的缓存,例如用户登录模块使用一个 redis 库,文章模块一个库

那么使用不同的 cacheName 就可以对应到不同的 redis 库,或者不同的 redis 实例,在使用的时候通过 Redis.use(cacheName) 就可以指定用的是哪个库

至于你说的用户的 key 与菜单 key 会重复的问题,显示需要让 key 不重复,或者 key 可以重复但存放的一级 key 不相同,redis 支持丰富的类型,你可以让用户与菜单分别放在两个不同的 map 中,在这两上 map 中使用相同的 key 就不会有问题

粗暴点的办法是将用户与菜单的 key 前面添加一个前缀,如: user_123, menu_123

当然,既然使用了 redis,一般都会将不同类型的数据放在不同的 map 中,建议学习一下 redis 的具体用法

kojz

2016-10-12 10:37

@JFinal 谢谢你的回答,意思已经明白。请问我现在已经安装了redis,在jfinal中如何创建多个实例,例如来保存user和meun。是否是写执行多个RedisPlugin(String cacheName, String host, int port)


RedisPlugin(“userCache”, host, port);
RedisPlugin(“menuCache”, host, port);

JFinal

2016-10-12 11:23

@kojz redis 的多个实例是指,你有多台服务器,每台服务器上安装一个 redis 服务,或者一台服务器上跑多个 reids 进程。前者是通过调整连接的 host 地址来连接多实例,后者则是通过不同的 port 连接,使用的时候,相当于 new RedisPlugin(...) 传入不同的 host 或不同的 port

另外一种在同一个 reids 实例中使用多个 RedisPlugin 的方式是,在创建 RedisPlugin 时, host 与 port 相同,但 int database 不同,就相当于使用同一个 redis 服务的不同 database

最后记住最重要一点,无论你使用上述哪种方式,多个 new RedisPlugin(...) 出来的对象对应着多个 cacheName,在使用的时候通过 Redis.use(cacheName) 进行指定

kojz

2016-10-12 13:55

@JFinal 明白了,谢谢,小应用还是用一个实例,多个DB比较合适

kojz

2016-10-12 14:40

@JFinal 还想再问一下,如果使用一个redis实例,N个db,则N个new RedisPlugin(...) ,对应是创建了N个连接吗?还是一个连接,如果是N个连接,是否影响性能?

JFinal

2016-10-12 15:28

@kojz 哪怕你是一个 new RedisPlugin(...) 也是有连接池,在连接池中有存在多个连接,否则多线程并发的时候会等待资源

kojz

2016-10-12 15:38

@JFinal 如果是一个实例,我觉得是否可以做到只有一个连接池,而不是每一个new都创建一个连接池?

JFinal

2016-10-12 16:03

@kojz redis 应该可以设置,找下相关文档

LancCJ

2017-09-18 15:16

@kojz 多个db的话,在缓存中改怎么获取,还是通过key?不同的db中key相同呢?

热门反馈

扫码入社