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

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)。

Redis系列-冷知识的更多相关文章

  1. redis系列--深入哨兵集群

    一.前言 在之前的系列文章中介绍了redis的入门.持久化以及复制功能,如果不了解请移步至redis系列进行阅读,当然我也是抱着学习的知识分享,如果有什么问题欢迎指正,也欢迎大家转载.而本次将介绍哨兵 ...

  2. Python 浮点数的冷知识

    本周的PyCoder's Weekly 上分享了一篇小文章,它里面提到的冷知识很有意思,我稍作补充,分享给大家. 它提到的部分问题,读者们可以先思考下: 若两个元组相等,即 a==b 且 a is b ...

  3. 【目录】redis 系列篇

    随笔分类 - redis 系列篇 redis 系列27 Cluster高可用 (2) 摘要: 一. ASK错误 集群上篇最后讲到,对于重新分片由redis-trib负责执行,关于该工具以后再介绍.在进 ...

  4. Redis系列文章-数据结构篇

    Redis系列文章 前言: 工作原因,在学习mybatis知识后,2个月没有补充新的知识了,最近拿起书本开始学习.打算写下这个Redis系列的文章. 目录结构如下: Redis内置数据结构 Redis ...

  5. Redis系列之key操作命令与Redis中的事务详解(六)

    序言 本篇主要目的有二: 1.展示所有数据类型中key的所有操作命令,以供大家学习,查阅,更深入的挖掘redis潜力. 2.掌握redis中的事务,让你的数据完整性一致性拥有更优的保障. redis命 ...

  6. 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  7. 前端不为人知的一面–前端冷知识集锦 原文地址(http://web.jobbole.com/83473/);

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  8. Redis系列(2)之数据类型

    Redis系列(2)之数据类型 <Redis系列(1)之安装>中介绍了Redis支持以下几种数据类型,那么本节主要介绍学习下这几种数据类型的基本操作 字符串类型,string 散列类型,h ...

  9. Redis系列(1)之安装

    Redis系列(1)之安装 由于项目的需要,最近需要研究下Redis.Redis是个很轻量级的NoSql内存数据库,它有多轻量级的呢,用C写的,源码只有3万行,空的数据库只占1M内存.它的功能很丰富, ...

随机推荐

  1. 遍历指定目录下指定类型文件的函数(fatkun Fix版)

    // ================================================================ // 遍历某个文件夹及子文件夹下某种文件, // 使用说明 // ...

  2. 关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转

    还记得我们刚开始学习html时使用的锚节点实现跳转吗? <a href="#target">我想跳转至目标位置</a> <p>第一条</p ...

  3. The implementation details of the built thermal setup

    Lucid infrared thermography of thermally-constrained processors

  4. pt_table_checksum对检查表的chunk大小的限制

    02-16T10:22:38 Skipping table xoxdb.tb_valuelog because on the master it would be checksummed in one ...

  5. GCD in Swfit 3.0

    这里包括了Queue, Group, Barrier, Semaphore等内容.基本上常用的GCD对象和方法在Swift3.0的改变都囊括其中. 代码在这里:https://github.com/f ...

  6. Object-C内存管理-对象引用计数的特例

    看到OC中内存管理这块,其中的引用计数部分,部分10.5上的EBOOK示例已经在10.9上不能运行正确了,比如下面的代码: NSString * str1 = @"string 1" ...

  7. 用js实现瀑布流的一种简单方法

    现在说瀑布流式布局似乎有点晚了,但是每一项技术都是向着“精”和“简”的方向在不断发展,在发展到极致之前,需要一个相当漫长的过程,因此,从这个角度来说,当瀑布流被应用得越来越多的时候,反而更应该讨论它, ...

  8. Codeforces #380 div2 C(729C) Road to Cinema

    C. Road to Cinema time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. Android ImageView高度根据图片比例自适应

    设置adjustViewBounds // 是否保持宽高比 <ImageView android:id="@+id/iv_test" android:layout_width ...

  10. iOS进阶_地图定位

    一.定位步骤 1.Xcode自带地图,直接先引入头文件 #import <CoreLocation/CoreLocation.h> 2.CLLocation框架中的CLLocationMa ...