• redis day02 下


    位图:是二进制数据(0101101010)2^32

    强势点:

      01_login :101110(比如:第一天登录,二天没登录)

      

      传统的字符串解决方案中 记录用户登录日期  统计堪忧

      01_login_20200206:  1

      01_login_20200207:  0

      

      传统的list解决方案中 统计堪忧,查找堪忧

      01_login :[20200206, 20200208](统计那天登录了)

    SETBIT kk3 8 1(第8位是1,其他为0)

    00000001

    Hash散列数据类型(field和value必须是字符串类型)

    字段和value      hk   {'age':18,'gemder':'male'}

    优点:

    1,特定条件下节约内存空间 满足两个条件才能节约 [1,字段小于512个,2:value不能超64个字节]--zipmap

    2,可按需获取字段的值

    hk 200 field  可精确查找具体的字段,如 age

    传统方案:

    python  准备一个200字段的字典  用 redis string  :json.dumps(字典)  r.set('pyd',d)

    缺点:

    1,不能让hash每一个field设置过期,  hk:{'age':18},只能对hk设置

    2,存储消耗大于字符串结构

    Redus--hash原理

    hash是无序的

    redis是二维的,当你存一个key的时候,是一个一维数组(0,1,2,3,4)

    数组 =( 0,1,2,3,4)

    数组 = (guwenyuan,1,2,3,4)

    1)hest h1 username guwenyuan  插入姓名

    1,hash(username)% 5 = 0(比如等于0) 就到数组中的 0位置、

    数组 = (guwenyuan,1,2,3,4)

    2,  hash(username)%5 =0(比如这个也等于0)

    age = 18  姓名和年龄的位置为一致的就是hash碰撞

    哈希碰撞:两个字段的哈希值对应的存储空间索引位置冲突,即为哈希碰撞

    哈希碰撞解决方案:在当前位置下方开辟存储空间,进行存储 --单链法

    3,扩容 - 当一维存储位置不够时,要进行扩容

    redis出发扩容条件  当总字段个数等于一维数组的长度是,开始扩容

    4,redis-渐进式的扩容 - 一次只迁一丢丢    保留两份数据,新旧两份数据,

    哈希的应用场景

     

  • 相关阅读:
    bzoj 1208: [HNOI2004]宠物收养所
    bzoj 1207: [HNOI2004]打鼹鼠
    【NOIP模拟赛】小奇的矩阵
    【NOIP模拟赛】小奇挖矿 2
    Making the Grade POJ
    POJ 3616Milking Time
    [USACO08JAN]电话线Telephone Lines
    Radar Installation POJ
    Warfare And Logistics UVA
    【NOIP2009】最优贸易
  • 原文地址:https://www.cnblogs.com/gwy1163/p/12269612.html
Copyright © 2020-2023  润新知