0%

redis过期删除

redis的键可以设置过期时间,但是并不是每个键一到过期时间就会立即删除,redis不可能给每个设置过期时间的key上添加一个定时器来监视是否过期,CPU根本承受不了如此多的定时线程

注意:我使用的版本是6.0.10,不同版本可能略有差别

删除策略

目前大众的删除策略有以下几种:

  • 定时删除 在设置键的同时创建定时器,过期时间到了就执行对键的删除,这种策略对内存使用率有优势,但是占用CPU资源太多
  • 定期删除 每隔特定时间对数据库进行一次扫描,检测并删除其中过期的键值对
  • 惰性删除 键值对过期暂时不进行删除,当获取键时先查看是否已经过期,过期则进行删除,这种策略可能会由于一些过期key一直没有被访问,浪费一定的内存

redis采用的策略是定期删除+惰性删除

定期删除是指每隔一段时间去检查是否有过期的key,如果有则删除

惰性删除是指在获取key的时候检查一下这个key是否过期

阅读全文 »

性能调优

操作系统参数调优

  • 增大文件打开限制上限 ulimit命令设置
  • 增大网络连接上限 内核参数net.core.somaxconn
  • 关闭swap分区 调整/etc/sysctl.conf文件中的vm.swappiness
  • 设置合理的预读缓冲区大小 预读可以有效减少磁盘的寻道次数和应用程序的IO等待时间,使用blackdev来设置预读缓冲区的大小

Hadoop参数调优

  • 限制每个TaskTracker上并发的MapTask和ReduceTask数目

    mapred-site.xml中配置

    mapreduce.tasktracker.map.tasks.maximum和mapreduce.tasktracker.reduce.tasks.maximum

redis持久化

为了防止数据丢失,redis需要将数据从内存dump到磁盘,也就是redis持久化,redis持久化有两种方式RDB和AOF

注意:我使用的版本是6.0.10,不同版本可能略有差别

RDB

RDB是指Redis DataBase,在指定的时间间隔内,将内存中数据的快照写入到磁盘dump.rdb的文件中,恢复时通过载入rdb文件来还原数据库状态。

rdb文件是一个经过压缩的二进制文件

redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到临时文件,持久化结束之后,将临时文件替换上次持久化好的文件(保存在dump.rdb文件中),RDB方式比AOF更加高效,但是可能会丢失最后一次持久化的数据

在这里fork的进程是根据当前进程fork的,包含了当前进程的所有数据、变量等

阅读全文 »

redis优点及场景

redis为什么会那么快

  • 内存操作
  • 单线程,避免了频繁的上下文切换
  • 采用了非阻塞I/O多路复用机制(提供了select、epoll、kqueue等函数)

使用场景

  • 缓存 redis提供了缓存过期时间设置,也提供了控制最大内存和内存溢出后的淘汰策略
  • 排行榜系统 redis可以使用zset来构建各种排行榜
  • 计数器 redis支持计数功能
  • 社交网络 redis可以用来做社交网络中的赞/踩、粉丝、共同好友、推送、下拉刷新等功能

不过,由于redis是存储在内存中的,如果数据量非常大,放在redis中的经济成本很高

redis基本命令

注意:我使用的版本是6.0.10,不同版本可能略有差别

redis服务和客户端都启动之后,就可以进行存取操作了

测试连接

1
ping

基本存取

1
2
3
4
5
6
7
8
9
set k1 hello
----------------
OK


get k1
----------------
"hello"

阅读全文 »