Redis的二八定律
常用命令:
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缓存中的数据是否能够访问成功,而写的一点测试代码,献丑了。
1 package com.itheima.store.service.impl; 2 3 import java.sql.SQLException; 4 import java.util.List; 5 6 import com.itheima.store.dao.CategoryDao; 7 import com.itheima.store.dao.impl.CategoryDaoImpl; 8 import com.itheima.store.domain.Category; 9 10 /** 11 * 分类模块:业务层的实现类。 12 * */ 13 14 import com.itheima.store.service.CategoryService; 15 import com.itheima.store.utils.BeanFactory; 16 import com.itheima.store.utils.DBUtil; 17 import com.itheima.store.utils.JedisUtils; 18 19 import net.sf.json.JSONArray; 20 import redis.clients.jedis.Jedis; 21 22 @SuppressWarnings("all") 23 public class CategoryServiceImpl implements CategoryService { 24 25 // @Override 26 // 异步加载查询所有分类的方法: 27 public List<Category> findAllCategory() throws Exception { 28 // CategoryDao dao = new CategoryDaoImpl(); 29 CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao"); 30 return dao.findAllCategory(); 31 } 32 33 @Override 34 // 缓存技术查询所有分类的方法: 35 /* 36 * 为了提升程序的性能,在这里将加入缓存的技术(redis),将获取到的分类数据放进缓存中,当用户下次再访问时,直接从缓存中获取数据,从而 37 * 减少了和数据库的交互。 38 */ 39 public String findAllCategoryAjax() throws Exception { 40 // 创建jedis对象 41 Jedis jedis = null; 42 try { 43 // 获得jedis对象 44 jedis = JedisUtils.getJedis(); 45 // 首先获取缓存中是否已经有分类数据 46 String categoryList = jedis.get("category_list"); 47 if (categoryList == null) { 48 // 说明缓存中没有数据,则去数据库查询 49 System.out.println("---------数据库中的数据-----------"); 50 // CategoryDao dao = new CategoryDaoImpl(); 51 CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao"); 52 List<Category> list = dao.findAllCategory(); 53 // 将list转成JSON格式的数据 54 JSONArray json = JSONArray.fromObject(list); 55 // 将JSON数据放进缓存中,并将查询到的数据返回给页面 56 jedis.set("category_list", json.toString()); 57 return jedis.get("category_list"); 58 } else { 59 // 如果缓存已经有数据,则将缓存中的数据返回给页面 60 System.out.println("--------------缓存中的数据-----------------"); 61 return categoryList; 62 } 63 } catch (Exception e) { 64 e.printStackTrace(); 65 } finally { 66 JedisUtils.closeJedis(jedis); 67 } 68 return null; 69 } 70 71 @Override 72 // 添加分类: 73 public void addCategory(Category category) throws Exception { 74 CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao"); 75 dao.addCategory(category); 76 // 注意:在修改了category表后,因为缓存中的数据还没有更新,前台页面的数据也没有更新,所以一旦改变了缓存中的数据后记得将缓存清空 77 // 清空缓存: 78 Jedis jedis = null; 79 try { 80 jedis = JedisUtils.getJedis(); 81 // 删除存放分类数据的key 82 jedis.del("category_list"); 83 } catch (Exception e) { 84 e.printStackTrace(); 85 } finally { 86 JedisUtils.closeJedis(jedis); 87 } 88 } 89 90 @Override 91 // 根据cid查询分类数据: 92 public Category findByCid(String cid) throws Exception { 93 CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao"); 94 Category category = dao.findByCid(cid); 95 return category; 96 } 97 98 @Override 99 // 编辑分类数据: 100 public void editCategory(Category category) throws Exception { 101 CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao"); 102 dao.editCategory(category); 103 // 清空缓存: 104 Jedis jedis = null; 105 try { 106 jedis = JedisUtils.getJedis(); 107 // 删除存放分类数据的key 108 jedis.del("category_list"); 109 } catch (Exception e) { 110 e.printStackTrace(); 111 } finally { 112 JedisUtils.closeJedis(jedis); 113 } 114 } 115 116 @Override 117 //删除分类数据: 118 /** 119 * 注意:因为分类表和商品表有着外检约束的关系,所以在删除分类数据之前, 120 * 要先删除该分类所关联的所有商品数据或将该分类所关联的所有商品的外键改变,则牵扯到事务。 121 * */ 122 public void deleteCategory(String cid) throws Exception { 123 Jedis jedis = null; 124 try { 125 //开启事务: 126 DBUtil.startTransaction(); 127 CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao"); 128 //首先根据当前cid修改商品表中的外键为null: 129 dao.updateByCid(cid); 130 dao.deleteCategory(cid); 131 //提交事务: 132 DBUtil.commit(); 133 // 清空缓存: 134 jedis = JedisUtils.getJedis(); 135 // 删除存放分类数据的key 136 jedis.del("category_list"); 137 } catch (Exception e) { 138 //回滚事务: 139 DBUtil.rollBack(); 140 e.printStackTrace(); 141 } finally { 142 JedisUtils.closeJedis(jedis); 143 } 144 } 145 146 }