电商笔记-08(Reids展示品牌名称与价格排序简单算法.PS:特绕)

来源:互联网 发布:儋州市政务网通知公布 编辑:程序博客网 时间:2024/06/11 07:37

分页&排序&关键字搜索的注意点

1,用户根据关键字搜索,查询数据,”下一页”链接中要携带条件参数

2,用户根据关键字搜索,查询数据,点击”价格”排序,点击”下一页”链接中要携带条件参数和下一页的排序风格

<注意:下一页的排序方式要和上一页的排序风格一样,不然就会出现,上一页是升序,下一页时降序.所以可以将”记忆排序”放到上一页/下一页链接上>

“价格”排序优化算法分析

  • keyword : 用户输入的关键字
  • priceSort :排序方式
  • sort:后台将反转后的排序规则传送到页面的变量

用户第一次根据关键字查询展示页面时

    window.location.href = "/search?keyword=" + $("#keyword").val()+"&priceSort=${sort2}";
后台controller先调用service
第一次为null不会排序
    //价格排序  price asc | price desc    if(priceSort != null && !priceSort.equals("")){    solrQuery.addSort(new SortClause(priceSort.split(" ")[0],priceSort.split(" ")[1]));    }
但是执行service回来后
如果关键字为空,或者为降序就将升序规则发送给页面
    if(priceSort != null && priceSort.equals("price asc")){        priceSort= "price desc";    }else{        priceSort = "price asc";    }    //将排序顺序,发送到"价格"链接,点击"价格才会生效"    model.addAttribute("sort",priceSort);

当用户点击价格,进行排序时

完成了第一次排序
    window.location.href = "/search?keyword=${keyword}&priceSort=${sort}";

用户再次点击

    //再次点击价格,就会发生反转    if(priceSort != null && priceSort.equals("price asc")){        priceSort= "price desc";    }else{        priceSort = "price asc";    }    //将排序顺序,发送到价格排序链接,点击"价格才会生效"    model.addAttribute("sort",priceSort);

“记忆功能”

用户第一次根据关键字搜索商品,点击”价格”升序排列之后,又换了别的关键字进行搜索.搜索的结果在没有点击”价格”排序的情况下,依然是以升序排列展示的.只需要在用户每次点击”价格”排序之前记录下排序方式,发送给页面,拼接到”搜索”链接这样用户在每次搜索时,就会按照之前的排序风格,进行排序.

Redis优化品牌显示

为了减少与数据库的交互(减少与mysql的交互),所以就将查询最新的品牌名称存到redis”缓存”中.在这里我只是做了在修改时更新.正式开发时,只要是与品牌相关的操作都要进行更新.

redis与mysql进行品牌数据同步的时间点:

添加品牌的时候,redis同步添加

修改品牌的时候,redis同步修改

删除品牌的时候,redis同步删除

redis配置

    <!-- redis 的配置 -->    <bean id = "jedis" class="redis.clients.jedis.Jedis" >        <constructor-arg value="192.168.56.109" index = "0" type="java.lang.String"/>        <constructor-arg value="6379" index="1"/>    </bean>

测试

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class JedisDemo {@Autowiredprivate Jedis jedis;@Testpublic void demo01(){    jedis.hsetnx("brand", "1", "meilida");    jedis.hsetnx("brand", "2", "jieante");    jedis.hsetnx("brand", "3", "feige");}@Testpublic void demo02(){    System.out.println(jedis.hget("brand", "1"));    System.out.println(jedis.hget("brand", "2"));    System.out.println(jedis.hget("brand", "3"));}}

同步到redis

// 品牌的修改@Overridepublic void update(Brand brand) {    brandDao.update(brand);    // 查询当前id最新的商品信息    Brand findById = brandDao.findById(brand.getId());    // 在用户将更新的品牌信息更新到数据时,redis中同样也要进行同步    jedis.hset("brand", String.valueOf(findById.getId()), findById.getName());}

前台获取

//前台获取品牌名称和品牌id@Overridepublic List<Brand> findBrandName() {    List<Brand> brands = new ArrayList<>();    //获取所有的品牌    Map<String, String> map = jedis.hgetAll("brand");    for (Entry<String, String> entry : map.entrySet()) {        Brand brand = new Brand();        brand.setId(Long.parseLong(entry.getKey()));        brand.setName(entry.getValue());        brands.add(brand);    }       return brands;}
原创粉丝点击