• redis一些笔记


    base


    字典:

    hget/hset

    在redis字典中值只能是字符串,使用渐进式进行rehash。在rehash的过程中,会保留两个hash结构;查询时会同时查询两个结构;逐渐完成hash的迁移。

    • 如果大部分时候使用结构中的大部分数据,可以选择将整个结构序列化,使用string类型存储。
    • 如果大部分时候使用结构中的小部分数据,可以将结构进行拆分再序列化存储。

    当hash最后一个元素被删除时,回收内存。


    键值对:

    get/set
    setnx = set if not exist
    setex //可以指定ttl
    

    键值对的方式进行存储,可以批量处理键值对。而且能够设置key的过期时间

    setex A 5 tyuio  # 5s 后过期,等价于 set+expire
    
    set A tyuio
    expire A 5
    

    setnx可以实现锁,redis的setnx

    • 并发量较高时,缓存到期失效,可能出现大规模访问数据库,需要锁,可以setnx实现;
    • 创建了锁却由于宕机没有解开锁崩盘,setnx需要tll,setnx+expire
    • 只有一个请求的 setnx 可以成功,但是任何一个请求的 Expire 却都可以成功(lua脚本
    • 新版redis只用set指令就可以实现上面功能
    • 如果一个请求更新缓存的时间比较长,甚至比锁的有效期还要长,导致在缓存更新过程中,锁就失效了,此时另一个请求会获取锁,但前一个请求在缓存更新完毕的时候,如果不加以判断直接删除锁,就会出现误删除其它请求创建的锁的情况,所以我们在创建锁的时候需要引入一个随机值(在val加上随机值,删除时判断下?这个只能解决删除不对应锁的问题)
    • 坏情况是每次请求都出现了锁超时,但通过ttl可以保证DB请求的间隔,避免雪崩

    集合set

    Set可以看成一个特殊的字典

    set		//列表,去重
    zset 	//有序列表,去重+排序
    

    zset的排序主要通过跳跃列表实现,能够进行快速查找


    《Redis 深度历险:核心原理与应用实践》

  • 相关阅读:
    在window10系统下安装redis
    Dubbo 基础用法
    vue处理对象值改变时dom值没有跟着变化的问题
    KMP算法
    Leetcode 502 IPO
    vue页面无法正常渲染的问题
    vue锚点双向绑定
    JavaScript克隆一个对象
    el-table刷新后table出现抖动现象
    el-table组件去掉滚动条的问题
  • 原文地址:https://www.cnblogs.com/Przz/p/9555730.html
Copyright © 2020-2023  润新知