常用命令

1、setex key 有效时间 value ----------意思就是添加并设置该键值对的存活时间
2、mset key1 value1 key2 value2 key3 value3 ....... -----------------意思就是一次性添加多个键值对
3、getset oldKey newValue -------------意思就是重新设置已存在的key的值,返回被覆盖的旧值
4、getrange key startIndex endIndex -----------意思就是获取该key对应的值的指定子字符串(起始索引从0开始)
5、mget key1 key2...... -------------意思就是一次性获取多个见对应的值
6、append key newStr ----------意思就是给已存在的字符串追加新子字符串
7、strlen key -------计算指定字符串的长度
8、expire key 10 -------意思就是设置该key的字符串的过期时间,经过10秒自动删除(过期)
9、ttl key --------查看该key的有效时长
10、ping ----------测试当前连接是否正常
11、dbsize ------------返回当前数据库中key的总数目
12、info -------查看当前连接的服务器信息和统计
13、flushdb ------------清空当前选择的数据库中所有数据
14、flushall ---------清空所有数据库中的数据。
 
 
接着给大家分享一下redis它是如何在实际项目中进行应用的,如有不妥,希望各位能够留言指正,谢谢。
缓存的应用:网站访问数据的特点大多数呈现在"二八定律":80%的业务访问集中在20%的数据上。这时为了减轻数据的压力和提高网站的数据访问速度,则可以使用缓存机制来优化网站。
下面我就直接给大家上代码了,这是我之前测试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的二八定律的更多相关文章

  1. 二八定律全面分析SEO全过程

    首先,大体的了解SEO的整个流程,SEO的整个流程无非是:关键词选定.标题标签描述的正确描写---内部优化----外链----内容---友情链接---更新. 在SEO界流行这样一句话:“内容为王,外链 ...

  2. 【OO课下讨论】bug中的“二八定律”

    bug中的"二八定律" 本文主要为讨论2020/3/17下午OO课讨论的第三个思考题设立 有一个经典的经验性原则,叫帕累托原则,也称为二八定律.这个原则在经济.社会和科技等多个领域 ...

  3. 为什么说Redis是单线程的以及Redis为什么这么快!(转)

    文章转自https://blog.csdn.net/chenyao1994/article/details/79491337 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到 ...

  4. 单线程Redis性能为何如此之高?

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 实际项目开发中现在无法逃避的一个问题就是缓存问题,而缓存问题也是面试必问知识点之一,如果面试官好一点可能会简单 ...

  5. 《为什么说Redis是单线程的以及Redis为什么这么快!》

    为什么说Redis是单线程的以及Redis为什么这么快!   一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓 ...

  6. 为什么说Redis是单线程的?

    一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据” ,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看 ...

  7. 为什么说Redis是单线程的以及Redis为什么这么块

    一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看似 ...

  8. 为什么说Redis是单线程的以及Redis为什么这么快!(转)

    一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看似 ...

  9. SEO之巴莱多定律

    SEO这个词在2007.2008年好像特别的火,尤其在2007年下半年至今,众多SEO爱好者发起了最大的一轮搜索引擎优化研究风暴,甚至最终逼迫百度等大型搜索引擎公司改变算法. SEO,确实能带来一些经 ...

随机推荐

  1. tp框架里的 删改

    //显示主页面 <table width="> <tr> <td>代号</td> <td>名称</td> <td ...

  2. Lambda表达式例子

    转 Lambda表达式例子 1.Java8 新特性介绍 写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下: Lambda表达式 函数式接口 Stream Optional ...

  3. IOS开发-ObjC-NSDictionary

    OC中Foundation框架中有字典类,字典分不可变字典(NSDictionary)和可变字典(NSMutableDictionary),它们的使用如下: 不可变字典: //------------ ...

  4. SQLite高级:一库建多表,封装类

    package eoe.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; ...

  5. 子窗口url调整导致父窗口刷新

    2014年3月19日 10:22:38 如题: 在弹窗里搜索时,url发生改变,导致父窗口的div消失.为何? 之前的逻辑是隐藏div 现在修改为插入节点 .可是还是刷新字窗口后,父窗口里面的div节 ...

  6. jquery中html()或text()方法获取或设置p标签的值

    html()方法可以用来读取或者设置某个元素中的HTML内容,text()方法可以用来读取或者没置某个元素中的文本内容 html()方法 此方法类似于JavaScript中的innerHTML属性,可 ...

  7. 10 Python+Selenium键盘事件

    [环境信息] python3.6+selenium3.0.2+Firefox50.0+win7 [操作方法] 导入方法:from selenium.webdriver.common.keys impo ...

  8. xdebug.var_display_max_data

    Xdebug Display Full Details on var_dump() Xdebug is an excellent addition to a PHP developers arsena ...

  9. JavaScript定时机制、以及浏览器渲染机制 浅谈

    昨晚,朋友拿了一道题问我: a.onclick = function(){ setTimeout(function() { //do something ... },0); }; JavaScript ...

  10. HibernateSessionFactory类中Session对象的创建步骤

    HibernateSessionFactory类中Session对象的创建步骤: 1.初始化Hibernate配置管理类Configuration 2.通过Configuration类实例创建Sess ...