Redis的二八定律
常用命令:
package com.itheima.store.service.impl; import java.sql.SQLException;
import java.util.List; import com.itheima.store.dao.CategoryDao;
import com.itheima.store.dao.impl.CategoryDaoImpl;
import com.itheima.store.domain.Category; /**
* 分类模块:业务层的实现类。
* */ import com.itheima.store.service.CategoryService;
import com.itheima.store.utils.BeanFactory;
import com.itheima.store.utils.DBUtil;
import com.itheima.store.utils.JedisUtils; import net.sf.json.JSONArray;
import redis.clients.jedis.Jedis; @SuppressWarnings("all")
public class CategoryServiceImpl implements CategoryService { // @Override
// 异步加载查询所有分类的方法:
public List<Category> findAllCategory() throws Exception {
// CategoryDao dao = new CategoryDaoImpl();
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
return dao.findAllCategory();
} @Override
// 缓存技术查询所有分类的方法:
/*
* 为了提升程序的性能,在这里将加入缓存的技术(redis),将获取到的分类数据放进缓存中,当用户下次再访问时,直接从缓存中获取数据,从而
* 减少了和数据库的交互。
*/
public String findAllCategoryAjax() throws Exception {
// 创建jedis对象
Jedis jedis = null;
try {
// 获得jedis对象
jedis = JedisUtils.getJedis();
// 首先获取缓存中是否已经有分类数据
String categoryList = jedis.get("category_list");
if (categoryList == null) {
// 说明缓存中没有数据,则去数据库查询
System.out.println("---------数据库中的数据-----------");
// CategoryDao dao = new CategoryDaoImpl();
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
List<Category> list = dao.findAllCategory();
// 将list转成JSON格式的数据
JSONArray json = JSONArray.fromObject(list);
// 将JSON数据放进缓存中,并将查询到的数据返回给页面
jedis.set("category_list", json.toString());
return jedis.get("category_list");
} else {
// 如果缓存已经有数据,则将缓存中的数据返回给页面
System.out.println("--------------缓存中的数据-----------------");
return categoryList;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
return null;
} @Override
// 添加分类:
public void addCategory(Category category) throws Exception {
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
dao.addCategory(category);
// 注意:在修改了category表后,因为缓存中的数据还没有更新,前台页面的数据也没有更新,所以一旦改变了缓存中的数据后记得将缓存清空
// 清空缓存:
Jedis jedis = null;
try {
jedis = JedisUtils.getJedis();
// 删除存放分类数据的key
jedis.del("category_list");
} catch (Exception e) {
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
} @Override
// 根据cid查询分类数据:
public Category findByCid(String cid) throws Exception {
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
Category category = dao.findByCid(cid);
return category;
} @Override
// 编辑分类数据:
public void editCategory(Category category) throws Exception {
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
dao.editCategory(category);
// 清空缓存:
Jedis jedis = null;
try {
jedis = JedisUtils.getJedis();
// 删除存放分类数据的key
jedis.del("category_list");
} catch (Exception e) {
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
} @Override
//删除分类数据:
/**
* 注意:因为分类表和商品表有着外检约束的关系,所以在删除分类数据之前,
* 要先删除该分类所关联的所有商品数据或将该分类所关联的所有商品的外键改变,则牵扯到事务。
* */
public void deleteCategory(String cid) throws Exception {
Jedis jedis = null;
try {
//开启事务:
DBUtil.startTransaction();
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
//首先根据当前cid修改商品表中的外键为null:
dao.updateByCid(cid);
dao.deleteCategory(cid);
//提交事务:
DBUtil.commit();
// 清空缓存:
jedis = JedisUtils.getJedis();
// 删除存放分类数据的key
jedis.del("category_list");
} catch (Exception e) {
//回滚事务:
DBUtil.rollBack();
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
} }
Redis的二八定律的更多相关文章
- 二八定律全面分析SEO全过程
首先,大体的了解SEO的整个流程,SEO的整个流程无非是:关键词选定.标题标签描述的正确描写---内部优化----外链----内容---友情链接---更新. 在SEO界流行这样一句话:“内容为王,外链 ...
- 【OO课下讨论】bug中的“二八定律”
bug中的"二八定律" 本文主要为讨论2020/3/17下午OO课讨论的第三个思考题设立 有一个经典的经验性原则,叫帕累托原则,也称为二八定律.这个原则在经济.社会和科技等多个领域 ...
- 为什么说Redis是单线程的以及Redis为什么这么快!(转)
文章转自https://blog.csdn.net/chenyao1994/article/details/79491337 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到 ...
- 单线程Redis性能为何如此之高?
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 实际项目开发中现在无法逃避的一个问题就是缓存问题,而缓存问题也是面试必问知识点之一,如果面试官好一点可能会简单 ...
- 《为什么说Redis是单线程的以及Redis为什么这么快!》
为什么说Redis是单线程的以及Redis为什么这么快! 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓 ...
- 为什么说Redis是单线程的?
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据” ,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看 ...
- 为什么说Redis是单线程的以及Redis为什么这么块
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看似 ...
- 为什么说Redis是单线程的以及Redis为什么这么快!(转)
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看似 ...
- SEO之巴莱多定律
SEO这个词在2007.2008年好像特别的火,尤其在2007年下半年至今,众多SEO爱好者发起了最大的一轮搜索引擎优化研究风暴,甚至最终逼迫百度等大型搜索引擎公司改变算法. SEO,确实能带来一些经 ...
随机推荐
- FZU 1056 扫雷游戏
水题.统计一下周围有几个雷. #include<cstdio> #include<cstring> #include<cmath> #include<algo ...
- IdTCP的C++Builder2010示例(转)
源:IdTCP的C++Builder2010示例 IdTCP的C++Builder2010示例 这个是服务端的: void __fastcall TTCPDataServer::TCPServerEx ...
- 【转】每一个程序员需要了解的10个Linux命令
作为一个程序员,在软件开发职业生涯中或多或少会用到Linux系统,并且可能会使用Linux命令来检索需要的信息.本文将为各位开发者分享10个有用的Linux命令,希望对你会有所帮助. 以下就是今天我们 ...
- leetcode--003 LRU cache
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHAAAACmCAIAAAA9PO+sAAAgAElEQVR4nO3du3HbytvH8X8zqoB12A ...
- 【ural1297】 Palindrome
http://acm.timus.ru/problem.aspx?space=1&num=1297 (题目链接) 题意 求最长回文子串 Solution 后缀数组论文题 穷举每一位,然后计算以 ...
- EclipseEE导入项目出现的那些问题
1.显示.project文件丢失, 解决方法:在eclipse中删除和该项目相同的文件名,重新import即可 2.导入没有.classpath和.project文件的项目 解决方法:目前没遇到 3. ...
- Java 之 Servlet介绍(Java之负基础实战)
1.介绍 Servlet是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了 ...
- 安卓自定义类似TabHost的导航栏
有时候为了项目需要我们要自定义一些导航控件,类似下面这样. 下面给大家讲讲我是怎么实现的, 1.素材准备(这个都是美工的事情) 2.①资源文件共有五个 如下: activity_main_first. ...
- Struts1、WebWork、Struts2介绍
一.Struts1 1.Struts1原理简介 Struts1框架以ActionServlet作为控制器核心,整个应用由客户端请求驱动.当客户端向Web应用发送请求时,请求被Struts1的核心控制器 ...
- RMAN中FILESPERSET设置对备份速度的影响
看到网上部分人说不指定FILESPERSET(默认值=64)则会导致分配的通道只走第一个而导致备份效率低下,今天仔细研究了一下,参照了多个博主文章,得出结论如下: 如果没有指定filesperset, ...