美文网首页
7.redis原理

7.redis原理

作者: _少年不知愁 | 来源:发表于2019-07-20 22:06 被阅读0次

    目录

    --1.redis过期时间设置原理
    --2.redis数据持久化原理
    --3.redis内存回收策略

    1.redis过期时间设置原理

    a.redis可以使用expire命令设置一个键的过期时间,达到约定时间自动删除

    EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒
    PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒
    EXPIREAT <KEY> <timestamp> :将键的过期时间设为 timestamp 所指定的秒数时间戳
    PEXPIREAT <KEY> <timestamp>: 将键的过期时间设为 timestamp 所指定的毫秒数时间戳
    

    b.key还有多久时间被删除
    当键不存在时,TTL命令会返回-2,而对于没有给指定键设置过期时间的,通过TTL命令会返回-1

    TTL key
    

    c.移除key的过期时间设置
    清除了过期时间,则返回1 。 否则返回0(键不存在或者本身就是永久的)

    PERSIST key
    --针对字符串独有的过期时间设置方式
    setex(String key,int seconds,String value)
    

    d.key过期删除的原理
    redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合
    (1)惰性删除
    key值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除。缺点明显太浪费内存,对于不常用的,容易造成大量垃圾数据堆积
    (2)定时删除
    Redis会周期性地随机测试一些key,已过期的key将会被删掉。Redis每秒会进行10次操作,具体的流程:
    a 随机测试 20 个带有timeout信息的key;
    b 删除其中已经过期的key;
    c 如果超过25%的key被删除,则重复执行步骤1;
    其实还有一种删除机制:立即删除:设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除,缺点:redis是单线程,如果删除要删除大量的key值,遇上cpu繁忙时,会造成性能低下.

    2.redis数据持久化原理

    a.rdb

    
    符合一定条件时,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中
    Redis会在以下几种情况下对数据进行快照
    (1)根据配置规则进行自动快照
    save 900 1
    save 300 10
    save 60 10000
    (2)用户执行SAVE或者GBSAVE命令
    (3)执行FLUSHALL命令
    (4) 执行复制(replication)时
    

    b.aof

    默认情况下Redis没有开启AOF(append only file)方式的持久化,可以通过appendonly参数启用,在redis.conf中
    找到 appendonly yes
    

    相关文章

      网友评论

          本文标题:7.redis原理

          本文链接:https://www.haomeiwen.com/subject/bgqplctx.html