17.Redis-大厂程序员是怎么用的 | 青训营笔记

68 阅读5分钟

这是我参与「第五届青训营」笔记创作活动的第17天

一、本堂课重点内容

  1. 为什么需要Redis,Redis的基本工作原理
  2. Redis应用案例
  3. 在字节跳动,使用Redis有哪些注意事项

二、详细知识点介绍

redis简介


1.redis简介 --数据结构服务器:value可以是字符串(String),哈希(Map),列表(list),集合(sets)和有序集合(sorted sets)等类型 --key-value存储系统:REmote DIctionary Server。 --是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。


2.redis的特点:(Redis 与其他 key - value 缓存产品区别) --Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 --Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 --Redis支持数据的备份,即master-slave模式的数据备份


3.redis优势 --读写性能极高: 读-110000次/s,写-81000次/s --支持多种数据类型:支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作 --原子性: 即事务性,要么执行要么都不执行 --很多拓展特性: Redis还支持 publish/subscribe, 通知, key 过期等等特性。 缺点: --(1)单线程 (2)耗内存


4.Redis与其他key-value存储有什么不同? --1.支持原子性操作(事务) --2.运行在内存中,但可持久化到磁盘(因此要权衡数据量不能大于硬件内存) --3.内存中操作复杂数据结构,相比于磁盘中效率要高很多 --4.磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。


5.BSD协议: --1.代码开源 --2.可进行二次开发 --3.注明原作者BSD协议

三、实践练习例子

1.redis-使用最广泛的基于k/v存储的nosql-非关系型数据库

特性:
·使用简单
·高性能 : 万+处理量每秒
·支持多种数据结构:
    1.String
    2.Hash
    3.List
    4.Set
    5.Sorted Set(Zset)
·方案成熟:分布式/高可用等场景下游刃有余
    1.存储在内存中,可持久化到磁盘,重启时加载使用
    2.存储海量数据时,单个redis做不到
        ·支持集群分片存储-redis cluster/Codis/Twemproxy
        ·HA高可用 sentinel
        ·主从复制:master/slave模式

2.使用场景:1.2.3使用较多

1.热点数据:读多写少的-
2.用户信息:根据userid缓存起来
3.分布式锁
4.轻量级的mq
5.发布订阅等机制

3.redis客户端和服务端通信:RESP

   1.redis客户端常用;jedis,redission,现自己开发
   2.通信是基于tcp协议的
    http基于tcp的一个应用层协议
    resp也是基于tcp的一个应用层协议:
        ·resp协议官方解释:redis.io/topics/protocol
        ·特性:
            -1.simple to implement 实现简单
            -2.fast to parse       快速解析
            -3.human readable      人可读
        \r\n换行作为每段数据的分隔方式
        * + 单行信息
        * - 错误信息
        * : 整形数字
        * $ 多行字符串
        * * 数组

redis高级

·比如1000w使用redis存储
·200w距离占2G内存
1.假设5台机器,每台2G内存,现做以上模拟:
2.单台无法存储,所以数据分开存放至多台服务器上
3.根据key的不同自动存到不同的redis服务中---分布式、分片存储

redis代理

1. 自动对数据进行分配存储:分别存储在A,B,C,D,E五台服务器
-启动三个redis:
    C:\Users\cjh>h:
    H:\>cd redis
    H:\redis>redis-server --port 6380
    redis-server --port 6381
    redis-server --port 6382
-四套数据分散存储在不同服务器:
-由代理服务和具体的redis-server进行交互

哨兵机制

-前提:主从复制
-redis-master挂掉以后,哨兵会选择一个slave节点晋升为master,以实现集群的高可用
1.redis主从:
     C:\Users\cjh>h:
     H:\>cd redis
     H:\redis>redis-server --port 6380
     redis-server --port 6381 --slaveof 127.0.0.1 6380
     redis-server --port 6382 --slaveof 127.0.0.1 6380
2.启动redis自带哨兵:
    哨兵配置详解:doc.redisfans.com/topic/sentinel.html
    ./redis-server ./sentinel.conf --sentinel
3.自己实现一个java版的哨兵服务:sentinel
     * 哨兵机制具体实现:
     *  ·选举机制:轮询
     *  ·实现:
     *      1.启动定时:N秒执行一次
     *          ·检查master是否可用(ping通)
     *            ·可用:
     *              1.更新slave列表
     *              2.检查bad server列表
     *                  ·循坏ping,通则正常,不通则跳出
     *                  ·正常后挂载到当前master
     *                  ·更新slave列表
     *

     *            ·不可用:
     *              1.将当前redis实例划入bad server
     *              2.从slave中选举一个座位master
     *              3.现有的slave切换到新的master
     *              4.继续走可用流程

redis相关开源项目

-1.Jedis:github.com/xetorthio/jedis
-2.Redission:github.com/redission/redission
-3.推特开源:../twitter/twemporxy
-4.豌豆荚团队开源:../CodisLabs/codis
-5.官方高可用:sentinel(哨兵)

电商网站常用技术:高可用分布式系统做支撑

1.搜索引擎:Elasticsearch,solr,lucene
2.日均PV(访问量)上亿:cdn,降级,lvs负载,nginx反向代理...
3.账户系统
4.交易系统:订单,支付,购物车,秒杀
——————————————————————————————
1.商品详情页:
    ·剖析一线电商商品详情页亿级PV应对策略
    ·动静分离,缓存更新,服务降级,限流,CDN加速
2.商品搜索:
    ·Elasticsearch,solr,lucene
    ·索引更新,分词算法,搜索命中率提升
    ·订单实时统计
3.交易保证:
    ·添加购物车,提交订单,秒杀等核心功能
    ·订单可靠性保证:避免重复订单,避免漏单,要能够有补单功能
    ·缓存设计,缓存击穿,缓存雪崩的出现场景及解决方案
    ·mongodb,memcached,kafka,zookeeper,分布式调度