`

基于Jedis的Redis的Web页面操作

阅读更多

一. 思路

1.通过反射找到对应的方法名;

2.通过参数个数确定要调用的方法;

3.通过参数类型转换输入参数的类型;

4.通过Method.invoke方式执行。

 

二.代码如下:

    public Map<String, Object> invoke(String methodName, String param) {
        Map<String, Object> res = Maps.newHashMap();
        methodName = methodName.trim();
        param = param.trim();
        if (StringUtils.isBlank(methodName)) {
            res.put("msg", "请输入方法");
            return res;
        }
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            String[] params = null;
            Method target = null;
            Object[] targetParams;
            if (StringUtils.isNotBlank(param)) {
                params = param.split(" ");
                targetParams = new Object[params.length];
            } else {
                targetParams = new Object[]{};
            }

            // 遍历找到同名方法
            List<Method> methods = Lists.newArrayList();
            for (Class<?> searchType = jedis.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) {
                Method[] methodArray = searchType.getDeclaredMethods();
                for (Method method : methodArray) {
                    if (method.getName().equals(methodName)) {
                        Reflections.makeAccessible(method);
                        methods.add(method);
                    }
                }
            }
            // 根据参数个数判断正确方法
            for (Method method : methods) {
                logger.error(method.getName());
                Class<?>[] parameterTypes = method.getParameterTypes();
                if (ArrayUtils.isNotEmpty(parameterTypes) && ArrayUtils.isNotEmpty(params)) {
                    logger.error(parameterTypes[0].getName());
                    if ("[B".equals(parameterTypes[0].getName())) {
                        continue;
                    }
                    if (parameterTypes.length == params.length) {
                        target = method;
                        break;
                    }
                } else if (ArrayUtils.isEmpty(params) && ArrayUtils.isEmpty(parameterTypes)) {
                    target = method;
                    break;
                }
            }

            // 根据Method参数转换输入参数数据类型
            if (null != target && ArrayUtils.isNotEmpty(params)) {
                Class<?>[] parameterTypes = target.getParameterTypes();
                for (int i = 0; i < params.length; i++) {
                    if (parameterTypes[i].getName().contains("String")) {
                        targetParams[i] = params[i];
                    } else if (parameterTypes[i].getName().contains("int")) {
                        targetParams[i] = Integer.valueOf(params[i]);
                    } else if (parameterTypes[i].getName().contains("double")) {
                        targetParams[i] = Double.valueOf(params[i]);
                    } else if (parameterTypes[i].getName().contains("float")) {
                        targetParams[i] = Float.valueOf(params[i]);
                    }
                }
            }
            Object result = target.invoke(jedis, targetParams);
            res.put("msg", jsonMapper.toJson(result));
        } catch (Exception e) {
            logger.error("执行Redis异常", e);
            res.put("msg", e);
        } finally {
            if (jedis != null) {
                jedis.disconnect();
            }
        }
        return res;
    }

 

分享到:
评论

相关推荐

    java基于Redis实现排行榜功能源码

    5. **前端页面**:设计并实现一个简单的Web界面,展示排行榜,并允许用户交互,如提交分数。 6. **README.md文件**:这个文件会包含项目的详细步骤,包括环境配置、依赖安装、代码运行和测试方法。 7. **...

    jedis-2.8.1-and-spring-4.0.8 下载

    总结来说,"jedis-2.8.1-and-spring-4.0.8 下载"提供的压缩包是实现基于Redis的缓存解决方案的重要组件,结合使用Jedis和Spring,可以帮助开发者高效、便捷地在Java Web项目中搭建和管理Redis缓存系统,提升系统的...

    Maven+Springmvc+Redis示例

    在本示例中,我们探讨的是如何利用Maven构建一个基于Spring MVC的Java Web项目,并集成Redis作为缓存系统。这个名为"redisDemo"的压缩包文件提供了完整的代码示例,帮助开发者理解并实践这一技术栈。 首先,Maven是...

    springMVC注解+ security + redis 实例

    例如,通过使用Spring Data Redis,开发者可以轻松地将数据缓存在Redis中,并通过Jedis或Lettuce客户端进行操作。 **整合Spring MVC、Security与Redis** 在实际项目中,Spring MVC、Security和Redis可以协同工作以...

    redis + ajax实现异步下拉列表加载

    使用Jedis或Lettuce等Java Redis客户端库,我们可以轻松地从Redis中读取数据。根据需求,可以预先将所有数据加载到Redis,或者实现一个按需加载的策略,比如分页。 3. **数据交互**:在接收到Ajax请求后,后端从...

    redis实战项目-dianping-redis.zip

    Redis以其内存存储、数据结构丰富、操作速度快等特点,成为现代Web应用中不可或缺的数据存储解决方案。它支持字符串、哈希、列表、集合、有序集合等多种数据结构,同时提供发布/订阅、事务、持久化、主从复制、Lua...

    RedisCache-master.zip

    - 可能有客户端库,如 Jedis(Java)、redis-py(Python)等,用于与 Redis 交互。 - 可能有关于如何部署和管理 Redis 实例的文档。 - 可能包含测试用例,展示如何测试 Redis 缓存的有效性。 5. **Redis 在实际...

    spring boot、 mybaits、 spring security、 redis整合

    在Java应用中,Jedis是常用的Redis客户端库。 **整合过程** 整合Spring Boot、MyBatis、Spring Security和Redis,首先需要在Spring Boot项目中引入相应的依赖。在`pom.xml`文件中添加MyBatis、Spring Security和...

    AsyncMailSend:基于Redis消息队列实现的异步化框架,将页面注册与邮件发送解耦,实现在注册成功后异步发送邮件的功能。 运行项目的时候: 需先开启Redis服务

    在Java中,我们可以使用Jedis或Lettuce等Redis客户端库来与Redis服务器通信。同时,为了实现异步处理,可以使用Spring框架的`@Async`注解或者Java的`CompletableFuture`来处理邮件发送任务,确保邮件发送不会阻塞...

    java api 常备库

    Java可以通过Jedis库操作Redis。Jedis提供了一系列方法,如`set()`、`get()`、`lpush()`等,用于执行Redis命令。 5. **Linux**: 在Java中,可以使用`java.lang.ProcessBuilder`和`java.io.File`类与Linux系统进行...

    SpringMVC+Nutz框架介绍.pdf

    Nutz则是一个轻量级的Java Web框架,它简化了数据库操作,提供了防止SQL注入的安全特性,并且能适应多种数据库环境。Shiro用于权限管理和认证,支持二级缓存,通过Redis实现session同步,提高安全性。Jedis是Redis的...

    javaWeb阶段所涉及到的部分jar包.rar

    4. **jedis**: Jedis是Redis官方推荐的Java客户端,用于与Redis服务器通信。Redis是一个高性能的键值存储系统,常用于缓存、消息队列等场景,Jedis则方便了Java开发者在项目中使用Redis。 5. **json**: JSON...

    nodeJS学习的课程作业

    - **Java Redis 客户端**:介绍常用的 Java Redis 客户端,如 Jedis 和 Lettuce。 - **示例代码**:提供 Java 代码示例,展示如何在 Java 应用中使用 Redis 客户端进行数据操作。 ### Memcached 学习与实践 #### ...

    springboot仿淘宝.zip

    通过SpringBoot的RedisTemplate或Jedis客户端,我们可以方便地进行Redis操作,实现数据的快速存取。 HTML作为前端的基础语言,负责页面的结构布局。在这个项目中,开发者可能使用HTML配合CSS和JavaScript构建用户...

    java项目集合csdn.7z

    Java开发者需要掌握Jedis或Lettuce等Redis客户端的使用,理解其数据结构(如String、List、Set、Hash、Sorted Set)以及持久化、主从复制、事务等特性。 5. **JAVA---MySQL**: MySQL是流行的开源关系型数据库管理...

    ssm框架整合.docx

    描述中还提到了一些其他库,例如SLF4J(日志记录)、Jedis(Redis客户端)、SolrJ(Solr搜索库的Java客户端)、Dubbo(分布式服务框架)、Zookeeper(分布式协调服务)、ActiveMQ(消息队列)、Freemarker(模板...

    ssm黑马旅游整合最终版2018

    - **其他工具类库**:Jackson(JSON处理)、Jedis(Redis客户端)、JavaMail(邮件发送)、JSTL(标签库)、Servlet API等。 ```xml &lt;!-- 单元测试 --&gt; &lt;groupId&gt;junit &lt;artifactId&gt;junit &lt;groupId&gt;...

Global site tag (gtag.js) - Google Analytics