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,确实能带来一些经 ...
随机推荐
- Xcode--Alcatraz来管理Xcode插件
简介 Alcatraz是一个帮你管理Xcode插件.模版以及颜色配置的工具.它可以直接集成到Xcode的图形界面中,让你感觉就像在使用Xcode自带的功能一样. 安装和删除 使用如下的命令行来安装Al ...
- 利用curl验证ssl网站(webservice)
curl的用法: http://linux.about.com/od/commands/l/blcmdl1_curl.htm DER格式的cert转换为PEM格式(curl只接受PEM格式): ope ...
- Oracle用户权限分配
一.权限分类 系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限.(是针对表或视图而言的). 二.系统权限管理 1.系统权限分类: ...
- Ubuntu切换默认语言
不得不说,从Ubuntu到Debian,又到CentOS 7,我胡汉三又回来了... 然后又装了个中文版的Ubuntu16.04LTS,不得不说,Ubuntu对中文的支持真的很好 不过,还是不太习惯, ...
- 【Xilinx-VDMA模块学习】-00-开始
最近在做XILINX图像相关的逻辑,需要用到VDMA模块,最后算是把这个模块摸得比较透了. 先在这里记一下,之后有空了总结一下.包括VDMA在Vivado中的GUI配置和软件驱动的详细理解.
- iOS 更改启动视图
TMMainViewCtrl *main = [[TMMainViewCtrl alloc] init]; self.window.rootViewController = main;
- github 之 下载历史版本
1.打开github中要下载的项目 2.点击commits 点击上图中标记的地方,进入下图所示: 3. 选择列表中的某个版本 4. Browse Files 5. 下载 点击上图中的 Download ...
- iOS 之 NSUserDefault
1. 概念 NSUserDefaults是一种特殊的property list.是系统封装的属性列表,方便记录简单的数据. 2. 使用说明 2.1. 创建NSUserDefaults NSUserDe ...
- 几种常用的控件(下拉框 可选框 起止日期 在HTML页面直接读取当前时间)
下拉框 <div class="form-group"> <label class="col-xs-3 c ...
- SuperSocket入门(一)-Telnet服务器和客户端请求处理
本文的控制台项目是根据SuperSocket官方Telnet示例代码进行调试的,官方示例代码:Telnet示例. 开始我的第一个Telnet控制台项目之旅: 创建控制台项目:打开vs程序,文件=> ...