zoukankan      html  css  js  c++  java
  • 面试题(redis)

    面试题(redis)

     
    复制代码
    你了解的redis?
    
    你用redis做过什么?
        - 配合django做缓存,常用且不易修改的数据放进来(博客)
        - 购物车信息
        - Session 
            - 缓存配置文件
            - session配置文件中指定使用缓存
        - rest api中访问频率控制
        - 基于flask、websocket实现的投票系统(redis做消息队列)
        - scrapy中
            - 去重规则
            - 调度器:先进先出、后进先出、优先级队列
            - pipelines 
            - 起始URL
        - 商品热点信息
        - 计数器
        - 排行
    
    为什么redis要做主从复制?
        目的是对redis做高可用,为每一个redis实例创建一个备份称为slave,让主和备之间进行数据同步,save/bsave。
            主:写
            从:读
        优点:
            - 性能提高,从分担读的压力。
            - 高可用,一旦主redis挂了,从可以直接代替。
        
        存在问题:当主挂了之后,需要人为手工将从变成主。
        
    redis的sentinel是什么?
        帮助我们自动在主从之间进行切换
        检测主从中 主是否挂掉,且超过一半的sentinel检测到挂了之后才进行进行切换。
        如果主修复好了,再次启动时候,会变成从。
        
    redis的cluster是什么?
        集群方案:
            - redis cluster 官方提供的集群方案。
            - codis,豌豆荚技术团队。
            - tweproxy,Twiter技术团队。
        redis cluster的原理?
            - 基于分片来完成。
            - redis将所有能放置数据的地方创建了 16384 个哈希槽。
            - 如果设置集群的话,就可以为每个实例分配哈希槽:
                - 192.168.1.20【0-5000】
                - 192.168.1.21【5001-10000】
                - 192.168.1.22【10001-16384】
            - 以后想要在redis中写值时,
                set k1 123 
              将k1通过crc16的算法,将k1转换成一个数字。然后再将该数字和16384求余,如果得到的余数 3000,那么就将该值写入到 192.168.1.20 实例中。
                
    redis是否可以做持久化?
        RDB:每隔一段时间对redis进行一次持久化。
             - 缺点:数据不完整
             - 优点:速度快
        AOF:把所有命令保存起来,如果想到重新生成到redis,那么就要把命令重新执行一次。
             - 缺点:速度慢,文件比较大
             - 优点:数据完整
            
    redis的过期策略。
        voltile-lru:    从已设置过期时间的数据集(server.db[i].expires)中挑选最近频率最少数据淘汰
        volatile-ttl:   从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
        volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
    
        
        allkeys-lru:       从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
        allkeys-random:    从数据集(server.db[i].dict)中任意选择数据淘汰
        no-enviction(驱逐):禁止驱逐数据
                    
    redis的分布式锁实现。
        - 写值并设置超时时间
        - 超过一半的redis实例设置成功,就表示加锁完成。
        - 使用:安装redlock-py 
            from redlock import Redlock
    
            dlm = Redlock(
                [
                    {"host": "localhost", "port": 6379, "db": 0},
                    {"host": "localhost", "port": 6379, "db": 0},
                    {"host": "localhost", "port": 6379, "db": 0},
                ]
            )
    
            # 加锁,acquire
            my_lock = dlm.lock("my_resource_name",10000)
            if  my_lock:
                # J进行操作
                # 解锁,release
                dlm.unlock(my_lock)
            else:
                print('获取锁失败')
    复制代码
  • 相关阅读:
    Big-data:Linux基础(04)--快捷键
    Big-data:Linux基础(03)
    Big-data:Linux基础(02)
    [mysql]删除和修改
    git使用两个异常处理
    jmeter函数使用以及json格式的后置处理器
    jmeter遇到中文不可见
    jmeter参数化
    GIT简易使用
    mysql基本语句(更新中)
  • 原文地址:https://www.cnblogs.com/xyhh/p/10861057.html
Copyright © 2011-2022 走看看