Redis学习2
来源:互联网 发布:win8系统改mac地址 编辑:程序博客网 时间:2024/06/10 08:43
redis管道(pipeline)
redis的pipeline(管道)功能在命令行中没有,但是redis是支持管道的,在java的客户端(jedis)中是可以使用的。
测试发现:
1:使用管道方式,插入1000条数据耗时37毫秒
Pipeline pipelined = jedis.pipelined();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
pipelined.set("test"+i, "test"+i);
}
pipelined.sync();
System.out.println(System.currentTimeMillis() - start );
2:不使用管道方式,插入1000条数据耗时328毫秒
long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
jedis.set("test"+i, "test"+i);
}
System.out.println(System.currentTimeMillis() -start);
redis任务队列
可以使用list的lpush和rpop实现,左进右出。brpop命令也可以弹出最后一个元素,如果集合为空,会等待有新元素,
并弹出
brpop 有两个参数,一个是监听的list 一个是超时时间,如果集合中没有元素会等待,但超过超时时间停止等待
brpop list 0 代表永不超时
任务优先级队列
同时监听三个list
例 brpoplist1 list2 list3 0 优先级是递减的
redis持久化(persistence)
redis支持两种方式的持久化,可以单独使用或者结合起来使用。
第一种:RDB方式 (默认)
第二种:AOF方式
redis持久化之RDB
rdb方式的持久化是通过快照完成的,当符合一定条件时redsi会自动将内存中的所有数据进行快照并存储到硬盘上。
默认存储在redis根目录的dump.rdb文件中。
rdb是redis默认采用的持久化方式,配置信息在配置文件redis.conf中
save 900 1:表示900秒内至少一个键被更改则进行快照。
save 300 10
save 60 10000
手动执行save或者bgsave命令让redis执行快照。
两个命令的区别在于,save是由主进程进行快照操作,会阻塞其它请求。bgsave会通过fork子进程进行快照操作。
redis实现快照的过程:
1.redis使用fork函数复制一份当前进程的副本(子进程)
2.父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件
3.当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此,一次快照操作完成
文件修复命令:redis-check-dump
rdb的优缺点
优点:由于存储的有数据快照文件,恢复数据很方便。
缺点:会丢失最后一次快照以后更改的所有数据。
redis持久化之AOF
aof方式的持久化是通过日志文件的方式。默认情况下redis没有开启aof,可以通过参数appendonly参数开启。
appendonly yes
aof文件的保存位置和rdb文件的位置相同,都是dir参数设置的,默认的文件名是appendonly.aof,可以通过
appendfilename参数修改
appendfilename appendonly.aof
aof日志文件重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
手动执行bgrewriteaof进行重写
redis写命令同步的时机
appendfsync always 每次都会执行
appendfsync everysec 默认 每秒执行一次同步操作(推荐)
appendfsync no不主动进行同步,由操作系统来做,30秒一次
文件修复:redis-check-aof
动态切换redis持久方式,从 RDB 切换到 AOF(支持Redis 2.2及以上)
CONFIG SET appendonly yes
CONFIG SET save ""(该命令可选,将save参数置空了,代表不进行RDB方式持久化)
redis优化
精简键名和键值
键名:尽量精简,但是也不能单纯为了节约空间而使用不易理解的键名。
键值:对于键值的数量固定的话可以使用0和1这样的数字来表示,(例如:male/female、right/wrong)
当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能
内部编码优化(了解)
redis为每种数据类型都提供了两种内部编码方式,在不同的情况下redis会自动调整合适的编码方式。
SLOWLOG
slowlog-log-slower-than 它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的命令进行记录
slowlog-max-len 它决定 slowlog 最多能保存多少条日志
RedisClient -- redis可视化客户端工具
未完待续。。。
- redis常用命令----- redis学习(2)
- redis学习总结2
- redis学习日志2
- redis学习(2)
- Redis学习2
- redis学习笔记2
- redis学习笔记(2)
- redis学习笔记-2
- redis 常用命令学习2
- Redis学习笔记2-Redis的集群
- Redis 学习笔记2-redis数据类型
- Redis系列学习笔记2 Redis字符串
- Redis学习笔记(2)-Redis数据类型
- Redis学习-2:Linux安装Redis
- redis学习笔记2,配置文件
- Redis学习笔记(2)
- Redis学习笔记(2)
- REDIS学习(2)常用命令
- java 中的set方法和get方法的理解
- Android Studio更新问题解决
- 抛弃ssh,拥抱ssm
- 多核 多线程 进程的概念
- id和instancetype区别
- Redis学习2
- IOS应用提交所需的ICON
- flash学习记录1
- Django学习笔记1
- (转载)S3C2440A工程移植:从ADS1.2到RealView MDK
- DesignPatterns_Composite
- 为什么选择xUtils
- 用闭包优化Python程序 optimize-python-with-closures
- awk处理命令行参数