能存储512M
二进制安全,意味着可以存储图片,视频,音频等。
批量生成redis测试数据
1.Linux Bash下面执行
for((i=1;i<=20000000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;
生成2千万条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中
2.用vim去掉行尾的^M符号,使用方式如下::
vim /tmp/redisTest.txt
:set fileformat=dos #设置文件的格式,通过这句话去掉每行结尾的^M符号
::wq #保存退出
3.通过redis提供的管道--pipe形式,去跑redis,传入文件的指令批量灌数据,需要花10分钟左右
cat /tmp/redisTest.txt | 路径/redis-5.0.0/src/redis-cli -h 主机ip -p 端口号 --pipe
一次性返回所有的key,会造成卡顿。
分批次执行,消耗时间长,返回的游标可能大,可能小,返回的数据可能有重复数据,需要在程序中手动处理,如:放入set中去重。但是对服务器压力小。
Java开发包:
互斥性:
任意时刻,只能有一个客户端获取锁。
安全性:锁只能被持有该锁的客户端释放,不能由其他客户端释放。
死锁:获取锁的客户端由于某些原因宕机,未能释放锁,其它客户端再也不能获取锁。
容错:当部分节点宕机,客户端仍然能够获取锁和释放锁。
设置2秒的过期时间。
缺点:若是刚好执行到setnx,获得锁,还未来得及给锁增加过期时间,就完了。
虽然Redis操作是原子性的,但是,这两步分先后执行就不是了。
需要等到10秒后才能执行成功。
不想通过sleep机制去重试。
两个客户端模拟生产者,消费者:
客户端一:
此时会等待30秒。
客户端二:
此时,客户端一:
End
演示发布订阅是如何工作的:
两个myTopic订阅者:
一个anotherTopic订阅者:
一个生产者:
前两个myTopic订阅者:
发布者再生产一个消息:
订阅者:
也就是说,发布消息的时候,订阅者不在线,当订阅者再次登录的时候,收不到该消息。
900秒内,有一次写入,就进入备份。
当备份进程出错的时候,主进程停止接收新的写入操作。
保护持久化数据一致性。
如果业务系统有完善的监控系统,可以关闭。
在备份的时候,将rdb文件压缩。
一般设置为no
禁用rdb配置:
在save后,添加上图一行,就禁用了rdb配置。
Save会阻塞主线程,知道rdb结束。
BGSave会fork出一个子进程创建RDB文件,记录当时数据库状态,父进程继续处理接收到的命令,子进程完成后,会发送信号给Redis主进程,主进程在处理命令的同时,通过轮询接收子进程的信号。BGSave使用后台的方式保存RDB文件,调动此命令后,会立即返回OK返回码,同时fork出一个子进程处理,并立刻恢复对客户端的服务,在客户端可以通过lastSave指令查看操作是否成功,它记录了上一次执行save或BGSave成功的时间。
实践:
客户端被卡住一段时间,dump.rdb文件重新生成,服务恢复正常。
BGSave生成rdb文件:
可以通过JAVA的定时器定期调用Redis的BGSave指令,备份rdb文件,并按照时间戳存储不同的rdb文件,作为Redis某段时间的全量备份脚本。
如:发现lastsave改变后,调用
Xxxxx代表时间戳,用来区分不同时间段的全量备份文件。
Aof默认是关闭的,通过设置配置使其生效:
能够接受这三个参数。
Always:一旦缓存区的内容发生变化,总是及时地将缓存区的内容写入到aof当中。
Everysec:每秒一次
No:将写入aof的调用交给操作系统决定,一般为了提高效率,只有缓存区被填满,操作系统才会开始同步数据到磁盘当中。
推荐everysec。
当Redis关闭时:
重启服务的时候,
若是:
只有等服务打印:
Aof可以手动触发。
先rdb,速度快,再使用aof增量更新。
批量生成redis测试数据
1.Linux Bash下面执行
for((i=1;i<=20000000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;
生成2千万条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中
2.用vim去掉行尾的^M符号,使用方式如下::
vim /tmp/redisTest.txt
:set fileformat=dos #设置文件的格式,通过这句话去掉每行结尾的^M符号
::wq #保存退出
3.通过redis提供的管道--pipe形式,去跑redis,传入文件的指令批量灌数据,需要花10分钟左右
cat /tmp/redisTest.txt | 路径/redis-5.0.0/src/redis-cli -h 主机ip -p 端口号 --pipe
追求弱一致性,不需要每时数据都一致,只需要保证最终数据是趋于一致的,也就是最终一致性。
主从同步和从从同步
第一次同步时,主节点做一次BGSave,同时将后续修改操作进入到内存buff中,将rdb文件全量同步到从节点中,从节点接受后,将rdb数据加载到内存中,加载完成后,通知主节点,将期间修改的操作记录和增量数据同步到从节点。
主从的缺点:不具备高可用行,当master挂掉后,不能做写操作。
解决方案:
实际中,虚拟节点为32或者更大。