迷你旅游网——分类条目栏展示(使用jedis优化查询数据库......)

1.使用Jedis技术
1)redis的意义
redis是当今基本所有互联网产品都在使用的一种提供键值对形式的内存数据库(非关系型数据库)。之所以说是内存数据库,是因为redis基于内存的读取和写入相比传统的数据库基于磁盘IO快上数倍。于是乎redis在现在的应用中使用的非常广泛。主要的作用在于,提供缓存服务,存储访问频率高的热数据防止穿透到数据库。

2)Jedis是什么;
Jedis是java的redis客户端,用来操作redis数据库。

3)应用在这里;
此项目中,分类条目的数据从数据库中来,却又是长期不变的数据,每次访问都要查询数据库非常消耗资源,故而在此处采用redis来优化,减少资源消耗。

2.代码实现
2.1. Servlet层代码
1)findAll()方法;

 	//声明service层的业务对象
    private CategoryService service = new CategoryServiceImpl();

    public void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.调用service
        List<Category> cs = service.findAll();
        //2.序列化json并响应给客户端
        writeValue(cs,response);
    }
    

2.2. service层代码
1)提供findAll()方法;

 	CategoryDao categoryDao = new CategoryDaoImpl();

    @Override
    public List<Category> findAll() {
        //1.从redis中查询
        //1.1获取jedis客户端
        Jedis jedis = JedisUtil.getJedis();
        //1.2可使用sortedset排序查询
        Set<Tuple> categorys = jedis.zrangeWithScores("category", 0, -1);
        List<Category> cs = null;
        //2.判断查询集合是否为空
        if(categorys==null || categorys.size()==0){
            //3.若为空,则从数据库中查询,存到redis中
            cs = categoryDao.findAll();
            for (int i = 0; i < cs.size(); i++) {
                jedis.zadd("category",cs.get(i).getCid(),cs.get(i).getCname());
            }
        }else{
            //4.若不为空,则将set数据存到list
            cs = new ArrayList<Category>();
            for (Tuple tuple: categorys) {
                Category category = new Category();
                category.setCname(tuple.getElement());
                category.setCid((int)tuple.getScore());
                cs.add(category);
            }
        }
        return cs;
    }
    

2.3. dao层代码
1)findAll()方法;

	 //1.定义sql语句
     String sql = "select * from tab_category ";
     //2.执行sql
     return template.query(sql,new BeanPropertyRowMapper<Category>(Category.class));
   

2.4. web层代码
1)header.html页面;

	$.get("category/findAll", {}, function (data) {
            //data: [{cid:?,cname:?},{},{}]
            //拼接首页条目
            var lis = '<li class=\"nav-active\"><a href=\"index.html\">首页</a></li>';
            //遍历数组,拼接<li>
            for (var i = 0; i < data.length; i++) {
                lis += '<li><a href="route_list.html?cid=' + data[i].cid + '">' + data[i].cname + '</a></li>';
            }
            //拼接收藏榜
            lis += '<li><a href="favoriterank.html">收藏排行榜</a></li>';
            //将<li>条目添加到<ul>中
            $("#category").html(lis);
        });

3.个人心得
1)将业务层的对象声明在方法外,方便调用;
private CategoryService service = new CategoryServiceImpl();

2)将持久层的对象声明在方法外,方便调用;
pricate CategoryDao categoryDao = new CategoryDaoImpl();

3)sortedset排序查询,jedis.zrangeWithScores按照分数排序;

4)若redis不为空,则将set数据存到list集合来使用;

for (Tuple tuple: categorys) {
            Category category = new Category();
            category.setCname(tuple.getElement());
            category.setCid((int)tuple.getScore());
            cs.add(category);
        }

5)注意Ajax返回的数据格式,以及拼接 li 标签;

 //data: [{cid:?,cname:?},{},{}]
 
  lis += '<li><a href="route_list.html?cid=' + data[i].cid + '">' + data[i].cname + '</a></li>';

4.后续完成线路的分页展示
//TODO…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.itcast.parent</groupId> <artifactId>itcast-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>cn.itcast</groupId> <artifactId>travel</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!-- Jackson Json处理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值