设为首页 收藏本站
查看: 1076|回复: 0

[经验分享] Redis管理后台开发

[复制链接]

尚未签到

发表于 2015-11-12 13:48:57 | 显示全部楼层 |阅读模式
  


  需求:现需要一redis可视化管理工具,能进行大数据量(10w以上)的查询,修改。
  现调研结果如下:
  目前主流redis管理工具有 phpRedisAdmin(php) redisAdminUI(.net),基本界面如下所示:
DSC0000.jpg


  可设置List,HashMap型同一个key值的分页功能,但是左栏keys无分页功能,当数据量达到十万级别,基本就死掉了。
  


  查看了源码,发现jedis并没有分页的支持功能,现处理方式:
  public ModelAndView list(HttpServletRequest request, @RequestParam(required = false) String ckey, @RequestParam(required = false) String pageNum, @RequestParam(required = false) String numPerPage) {
// 从池中获取一个Jedis对象
ModelMap modelMap = new ModelMap();
String db = request.getParameter("db");
String bkey = request.getParameter("bkey");
pageNum = (pageNum == null) || "".equals(pageNum) ? "1" : pageNum;
Integer pn = Integer.parseInt(pageNum);
numPerPage = (numPerPage == null) || "".equals(numPerPage) ? "18" : numPerPage;
Integer pz = Integer.parseInt(numPerPage);
db = (db == null) || "".equals(db) ? "0" : db;
Jedis jedis = JedisUtil.getJedis(Integer.parseInt(db));
String newKey = ckey != null && ckey.length() > 0 ? bkey + ckey : bkey + "*";
int total = jedis.keys(newKey).size();
Set<String> set = jedis.keys(newKey);
List<String> list = new ArrayList<String>(set);
Collections.sort(list);
Map resultMap = new TreeMap<String, String>();
if (list.size() > 0) {
int start = (pn - 1) * pz;
int end = pn * pz > list.size() ? list.size() : pn * pz;
Pipeline pip = jedis.pipelined();
for (int i = start; i < end; i++) {
pip.get(list.get(i));
}
List<Object> result = pip.syncAndReturnAll();
for (int i = start; i < start + result.size(); i++) {
resultMap.put(list.get(i), (String) result.get(i - start));
}
}
// 释放对象池
JedisUtil.closeJedis(jedis);
if (ckey != null) {
modelMap.put(&quot;ckey&quot;, ckey);
}
modelMap.put(&quot;bkey&quot;, bkey);
modelMap.put(&quot;db&quot;, db);
modelMap.put(&quot;total&quot;, total);
modelMap.put(&quot;resultMap&quot;, resultMap);
modelMap.put(&quot;pageCount&quot;, (int) Math.ceil(total / pz.doubleValue()));
modelMap.put(&quot;pageNum&quot;, pn);
modelMap.put(&quot;numPerPage&quot;, pz);
return new ModelAndView(&quot;/redis/list&quot;, modelMap);
}

虽然牺牲了该模块的内存,但对redis性能影响较小,经测试20w数据下,phpRedisAdmin已经白屏,但该模块速度在2s内。
  界面如下,目前正实现根据不同前缀分业务的配置功能:
DSC0001.jpg


  key&#20540;检索支持pattern匹配。
  


  另:用前缀区分业务类型而未使用db,因为虽然说Redis支持多个数据库(默认32个,可以配置更多),但是除了默认的0号库以外,其它的都需要通过一个额外请求才能使用。所以用前缀作为命名空间可能会更明智一点。另外,在使用前缀作为命名空间区隔不同key的时候,最好在程序中使用全局配置来实现,直接在代码里写前缀的做法要严&#26684;避免,这样可维护性实在太差了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138372-1-1.html 上篇帖子: 缓存方案之Redis 下篇帖子: PHP相关系列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表