大数据正式京淘6 秒速五厘米 2022-06-01 02:30 205阅读 0赞 # 大数据正式京淘6 # ### Redis基础命令 ### * set key value【修改值】 * incr key【自增】 * decr key【自减】 * incrby key 数字【按步数增长】 * decrby key 数字【按步数减退】 * append key value【追加数据】 * mset key1 value1 key2 value3【设置一批】--无法进行分片和集群计算,早期的Redis遗留功能 * mget key1 key2 key3【获得一批】--无法进行分片和集群计算,早期的Redis遗留功能 * ttl key【查看key-value的】存活时间 * \-1代表永久 * \-2代表过期 * expire key 时间(秒)【设置key-value的存活时间】 * 倒计时 * pexpire key 时间(毫秒)【设置key-value的存活时间】 * 秒杀 ### Redis的数据结构 ### * key-value的形式 * ![Mhi1gKc.png][] * Hash结构 * heset * hset key\_all key1 value1 * hset key\_all key2 value2 * hset key\_all key3 value3 * hset key\_all key4 value4 * ... * hget * hget key\_all key1 * hget key\_all key2 * hget key\_all key3 * hget key\_all key4 * ... * hexist * hdel * hkeys * hvals * list【双向列表:左上右下】 * lpush * rpush * lrange key start end * rrange key start end * linsert key before key1 * linsert key after key1 * lset key index value【负数的时候倒着数】 * lrem key index【0的时候都删除】 * ltrim key start stop【从start到stop】 * lpop key【删除列表的第一个并返回】 * rpoplpush key1 key2【头换位置】 * lindex key index【返回index位置的值】 ### 数据的分布存储 ### * 要完成数据的分片存储,需要至少多个redis实例 * 启动第二个和第三个redis服务器【不同的配置文件--复制】 * 注意改变端口 * 图示 * ![SXXtfLx.png][] * 登录指定的端口 * 默认redis-cli -p 6379 * redis-cli -p 端口号 * redis-cli -p 6380 * redis-cli -p 6381 * 如何存储数据和读取--代码操作 * 利用jedis来控制redis的命令功能 # # // 测试单个节点的连接 @Test public void jedis() { // 创建连接 Jedis jedis = new Jedis("117.50.2.181", 6379); jedis.set("name", "kungfupeng"); } ### 缓存逻辑 ### * 通过key获取缓存 * 有获取缓存的 * 没有:获取数据库的数据并添加到缓存 * 例子 # # // 缓存逻辑 @Test public void jedis() { // 创建连接 Jedis jedis = new Jedis("117.50.2.181", 6379); String temp = jedis.get("name"); if (StringUtils.isNotEmpty(temp)) {// 没有缓存,进行缓存 jedis.set("name", "kungfupeng"); } else { System.out.println(temp);// 有缓存,直接从缓存中取数据 } } ### 分片逻辑 ### * 循环遍历Redis的端口【太慢】 * 弊端:扩展的时候比较麻烦 * 例子 # # // 循环遍历 @Test public void jedis() { // Jedis对象 Jedis jedis = null; // 模拟数据 List<String> keys = new ArrayList<String>(); keys.add("key1"); keys.add("key2"); keys.add("key3"); keys.add("key4"); // 循环次数【1-2-3】【6379-6380-6381】 int index = 1; // 循环数据分配 for (String temp : keys) { if (index == 1) { jedis = new Jedis("192.168.12.23", 6379); } else if (index == 2) { jedis = new Jedis("192.168.12.23", 6380); } else if (index == 3) { jedis = new Jedis("192.168.12.23", 6381); index = 0; } index++; System.out.println(jedis.get(temp)); } } * hashCode取余【还可以】 * 优势:一个模块通用 * hash的散列特性 * 例子 # # @Test public void jedis() { // Jedis对象列表 List<Jedis> list_jedis = new ArrayList<Jedis>(); list_jedis.add(new Jedis("12.12.23.44", 6379)); list_jedis.add(new Jedis("12.12.23.44", 6380)); list_jedis.add(new Jedis("12.12.23.44", 6381)); // 模拟数据 List<String> keys = new ArrayList<String>(); keys.add("key1"); keys.add("key2"); keys.add("key3"); keys.add("key4"); // 循环数据分配 for (String temp : keys) { int num = temp.hashCode() % list_jedis.size(); for (int i = 0; i < list_jedis.size(); i++) { if (i == num) { System.out.println(list_jedis.get(i).get("key")); } } } } * 节点信息【较好】 # # List<JedisSharedInfo> infoList=new ArrayList<JedisSharedInfo>();//分片信息 infoList.add(new JedisSharedInfo("104.43.23.4",6380)); ... ShardedJedis jedis=new ShardedJedis(infoList);//分片对象 * 实例 # # @Test public void jedis() { List<JedisShardInfo> jlist = new ArrayList<JedisShardInfo>(); // 创建节点信息 JedisShardInfo jsi1 = new JedisShardInfo("123.12.13.31", 6379); JedisShardInfo jsi2 = new JedisShardInfo("123.12.13.31", 6380); JedisShardInfo jsi3 = new JedisShardInfo("123.12.13.31", 6381); // 添加节点信息 jlist.add(jsi1); jlist.add(jsi2); jlist.add(jsi3); // 将节点信息放入分片 ShardedJedis sj = new ShardedJedis(jlist); // 添加信息 sj.set("key", "value");// 自动判断,加入相应的Jedis } * Jedis池 * 减少创建和关闭的次数 * 实例 # # @Test public void jedis() { List<JedisShardInfo> jlist = new ArrayList<JedisShardInfo>(); // 创建节点信息 JedisShardInfo jsi1 = new JedisShardInfo("12.123.44.66", 6379); JedisShardInfo jsi2 = new JedisShardInfo("12.123.44.66", 6380); JedisShardInfo jsi3 = new JedisShardInfo("12.123.44.66", 6381); // 添加节点信息 jlist.add(jsi1); jlist.add(jsi2); jlist.add(jsi3); // 获取池的配置 JedisPoolConfig config = new JedisPoolConfig(); // 配置池中的连接个数 config.setMaxTotal(100); // 创建一个池对象 ShardedJedisPool sjp = new ShardedJedisPool(config, jlist); // 获得ShardedJedis对象 ShardedJedis resource = sjp.getResource(); // 存取缓存 resource.set("naem", "kungfupeng"); // 释放资源 sjp.returnResource(resource); } ### hash一致性和hash取余 ### * 都属于散列算法 * hash取余 1. 容易产生大规模的数据倾斜【散列必定倾斜】 2. 当redis服务器增加或减少时,n的值变了,数据的命中变化非常大,数据迁移的量也是相应的增加 * hash一致性 1. 一定程度上解决了数据倾斜,主要解决数据迁移 2. 【ip+端口】-->哈希散列-->整数值======对应=====43亿整数环的一个点 3. 【key】-->哈希散列-->整数值======对应=====43亿整数环的一个点 4. 保存:key顺时针找节点(IP+端口)------越密集越迁移少 5. 图解 * ![PRiRiGd.png][] * 归属 * 节点I * key3 * 节点II * key1 * 节点III * key2 * key4 6. 继续深入解决数据的平衡性 * 引入虚拟节点 * 图解 * ![EkwgT1d.png][] * 归属 * 节点I * 【key3】 * 虚拟节点I\_1 * 【key2】 * 虚拟节点I\_2 * 【key1】 * 节点II * 虚拟节点II\_1 * 虚拟节点II\_2 * 节点III * 虚拟节点III\_1 * 虚拟节点III\_2 * 【key4】 * 结论虚拟节点越多,平衡越好 ### 京淘中的缓存 ### * 商品分类树【可以】 * 商品列表【可以:注意分页参数】 * 商品新增【可以】 * 商品修改【可以】 * 商品删除【不需要】 * 商品详情【可以】 [Mhi1gKc.png]: https://i.imgur.com/Mhi1gKc.png [SXXtfLx.png]: https://i.imgur.com/SXXtfLx.png [PRiRiGd.png]: https://i.imgur.com/PRiRiGd.png [EkwgT1d.png]: https://i.imgur.com/EkwgT1d.png
相关 大数据正式京淘3 大数据正式京淘3 EasyUI简介 文档 每个组件的easyui有属性、方法和事件。用户可以方便地扩展。 属性 Dear 丶/ 2022年06月02日 12:51/ 0 赞/ 237 阅读
相关 大数据正式京淘2 大数据正式京淘2 项目统一 编码:UTF-8 环境:JDK1.8 Maven:3.5 数据库:5.5 项目支撑系统搭建 新建w 末蓝、/ 2022年06月02日 12:27/ 0 赞/ 211 阅读
相关 大数据正式京淘正式14 大数据正式京淘正式14 传统的检索方式 1.文本检索/windows检索 全文检索、全文遍历 加载到内存中 缺点:数据一多,无法高效查询 蔚落/ 2022年06月01日 13:54/ 0 赞/ 183 阅读
相关 大数据正式京淘13 大数据正式13 定时任务 防止恶意订单 在订单提交之后,没有支付,但是订单没有生成效益,却减少了库存,如果大量生成这种订单,库存到0, 青旅半醒/ 2022年06月01日 12:43/ 0 赞/ 67 阅读
相关 大数据正式京淘10 大数据正式京淘10 数据库的读写分离 电商项目京淘项目的瓶颈有哪些 1. 数据库瓶颈 2. IO【图片(文件)的上传】 我就是我/ 2022年06月01日 07:19/ 0 赞/ 231 阅读
相关 大数据正式京淘9 大数据正式京淘9 redis集群总结 引入槽道:14384个虚拟槽道,扩展节点,无需修改代码 删除节点 1. 线路割接 2. 心已赠人/ 2022年06月01日 06:23/ 0 赞/ 250 阅读
相关 大数据正式京淘7 大数据正式京淘7 解决入口流量--NGINX的集群分配问题 解决:配置多台DNS域名解析器 图解 ![lzglcWQ.png][ ╰半橙微兮°/ 2022年06月01日 04:37/ 0 赞/ 181 阅读
相关 大数据正式京淘6 大数据正式京淘6 Redis基础命令 set key value【修改值】 incr key【自增】 decr key【自减】 incrby 秒速五厘米/ 2022年06月01日 02:30/ 0 赞/ 206 阅读
相关 大数据正式京淘4 大数据正式京淘4 数据库性能 数据库需要维护外键的内部关联(if语句,用代码关联) 涉及外键的操作增删改查,判断外键消耗资源 外键存在导致数据库的 冷不防/ 2022年06月01日 00:23/ 0 赞/ 88 阅读
还没有评论,来说两句吧...