zoukankan      html  css  js  c++  java
  • Redis系列-冷知识

    下面是一些看了,但觉得用处不大,不记下又可惜的东西。

    Redis删除过期数据

    redis通过expire/expireat(秒为单位)或者pexpire/pexpireat(毫秒为单位)来设置key的过期时间,reids是如何自动删除过期数据的呢?
    当client主动访问key时,如果key已过期会立刻删除。对于没有被访问到key,redis后台每秒10次的执行如下操作:随机选取100个key校验是否过期,如果有25个以上的key过期,除对过期key删除外,立刻再额外随机选取100个key进行校验,直到过期key少于25,本次操作结束。
    可见,过期数据不多每秒会有200条的数据被删除,每秒删除数量会随着过期数的增多而增多。但是一个过期的key不被client主动访问,在redis中的存活时间就不定了。

    Redis的事务

    redis通过multi、discard、exec和watch实现自己的事务。redis对内存的操作是单线程进行的,所以它在执行事务之间,其他客户端的命令都会被拒绝的。
    其执行过程是:将多个命令排队打包,然后一次性、按顺序执行各命令。
    1. 开始事务(收到MULTI)
    2. 命令入队(客户端发过来的redis命令)
    3. 执行事务(收到EXEC)
    注意:
    事务开始执行后,不会处理其他客户端的其他命令,直到事务结束;
    命令入队列的过程中,如果客户端发送了错误命令,如参数数量不对、命令错误,服务端会向客户端返回出错信息,并将该事务的状态置为REDIS_DIRTY_EXEC;
    事务执行过程中发生错误,事务不会中断或失败,不影响已执行和后面要执行的命令
    事务不可嵌套,一个客户端只能发送一次MULTI,在MULTI过程中,继续发送MULTI会被忽略,不会影响队列中的命令;
    WATCH的作用:在事务开始前监视任意数量的可以(WATCH key [key ...]),当调用EXEC时,任一个被监视key发生修改,整个事务就不再执行,直接返回失败。

    Redis淘汰机制

    内存是有限的,当达到最大内存后redis需要淘汰一些数据(也可通过maxmemory <bytes>配置最大内存),选定要驱逐的某个键值对后,会删除数据并更新到AOF日志(如果打开)和slave。
    淘汰策略有如下5种(通过maxmemory-policy配置,默认策略为 volatile-lru):

    • volatile-lru -> remove the key with an expire set using an LRU algorithm
    • allkeys-lru -> remove any key accordingly to the LRU algorithm
    • volatile-random -> remove a random key with an expire set
    • allkeys-random -> remove a random key, any key
    • volatile-ttl -> remove the key with the nearest expire time (minor TTL)
    • noeviction -> don't expire at all, just return an error on write operations
    主要是LRU和Minimal TTL两个算法的应用,它们都不是严格按照LRU和Minimal TTL实现的,从候选集中随机抽取若干key,选出值最大的进行淘汰,并不是从全量数据集中进行保证。对于抽样的大小可以通过 maxmemory-samples来设置(默认为 maxmemory-samples 3)。
  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981985.html
Copyright © 2011-2022 走看看