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

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. 【环境配置】php5.5 + apache2.4 安装配置【转+修改】

    转自 http://my.oschina.net/lilinzero/blog/180509 [转+修改][环境配置]php5.5.10 + apache2.4 安装配置 根据自己的实践所得,稍微修改 ...

  2. android蓝牙打印机

    您还未登录!|登录|注册|帮助 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 reality_jie的专栏 编程的过程是一种微妙的享受       目录视图 摘要视图 订阅 CSDN2013 ...

  3. Rails中用CSV导出中文真心有技巧

    require 'csv' class PartRequestsController < ApplicationController def render_csv_header(filename ...

  4. Zip压缩和解压缩

    这个功能完全依靠一个第三方的类,ICSharpCode.SharpZipLib.dll,只是在网上搜了大半天,都没有关于这个类的详细解释,搜索的demo也是各种错误,感觉作者完全没有跑过,就那么贸贸然 ...

  5. 去重 ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN

    关键字  ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN 按照分组字段进行排序并标编号 ROW_NUMBER() OVER(PARTITIO ...

  6. liunx 防火墙开放端口的设置

    今天在liunx 服务器上遇到一个问题,tomcat服务启动后怎么也访问不到项目,找了好久的原因,终于发现原来是liunx服务防火墙限制服务端口的访问,也就不多说了,看下面解决方法. 1.查看防火墙的 ...

  7. C++内存分配及变长数组的动态分配

    //------------------------------------------------------------------------------------------------ 第 ...

  8. windows环境下修改Mysql的root密码

    最近一直没用Mysql,root密码给忘了,然后就自己修改了一下,现在整理一下步骤.(我的版本是5.1) 启动MySQL服务:>>net start mysql 关闭MySQL服务:> ...

  9. IPv4头部结构

    2.2 IPv4头部结构 2.2.1 IPv4头部结构 IPv4的头部结构如图2-1所示.其长度通常为20字节,除非含有可变长的选项部分. 4位版本号(version)指定IP协议的版本.对IPv4来 ...

  10. mha报错

    用命令检查集群复制状态:masterha_check_repl --conf=/etc/masterha/app1.cnf 报错如下: Tue Jan 12 09:25:51 2016 - [info ...