Redis
2021-04-12 09:02:28 0 举报
AI智能生成
redis基础
作者其他创作
大纲/内容
是什么
基于内存的key-value结构的NoSQL数据库
支持多种数据结构的存储,string(字符串)、list(列表)、set(集合)、hash(哈希)、zset(有序集合)
支持持久化(周期性的把更新的数据存入磁盘或者把修改操作写入追加的记录文件)
所有操作都是原子性的(原子性:指事务的不可分割性,一个事务的所有操作要么不间断地全部被执行,要么一个也没有执行)
性能高效,支持每秒十几万此的读/写操作
支持集群、分布式、主从同步等配置
支持过期时间,支持事务,消息订阅
原理是什么
适合场景
数据高并发的读写
海量数据的读写
对数据高可扩展性的
速度够快,能够快速的存取数据
不适合场景
需要事务支持
基于sql的结构化查询存储,处理复杂的关系(用户自定义查询条件的查询)
如何使用
存储结构
子主题
Redis命令
启动命令
$ redis-cli -h host -p port -a password
$ redis-cli --raw (避免中文乱码)
$ redis-cli --raw (避免中文乱码)
Redis 键(key)
Redis 字符串(String)
Redis 哈希(Hash)
Redis 列表(List)
Redis 集合(Set)
Redis 有序集合(sorted set)
Redis的javaAPI操作
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
Redis的持久化(Redis默认开启RDB快照)
RDB持久化方案
定期保存快照到rbd文件(新快照覆盖旧快照)
配置保存时间:save [seconds] [changes]
手动执行快照
SAVE 直接调用 rdbSave ,阻塞 Redis 主进程
BGSAVE 由fork 出一个子进程,子进程负责调用 rdbSave,非阻塞
RDB方案优点
对性能影响最小(异步执行快照)
RDB是一个紧凑压缩的二进制文件,是某个时间点数据快照,适合备份和灾难恢复
Redis加载RDB恢复数据远远快于AOF方式。
RDB方案缺点
RDB方式数据无法做到实时持久化/秒级持久化,可能丢失数据
数据集大,CPU配置低,fork子进程会消耗较长时间,影响Redis对外提供服务的能力。
RDB方案配置
cd /export/servers/redis-3.2.8/
vim redis.conf
save 300 10
save 60 10000
save 5 1
vim redis.conf
save 300 10
save 60 10000
save 5 1
AOF持久化方案
将每个请求写入日志文件,Redis重启时,会将AOF文件中的所有操作按顺序执行一遍,保证数据最新
开启AOF
appendonly yes
AOF三种fsync同步磁盘配置
appendfsync no
不进行fsync,将flush文件的时机交给OS决定,速度最快
appendfsync always
每写入一条日志就进行一次fsync操作,数据安全性最高,但速度最慢
appendfsync everysec
折中的做法,交由后台线程每秒fsync一次
AOF rewrite(aof文件会越来越大,则需要rewirte)
BGREWRITEAOF命令触发
配置自动执行
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
在AOF rewrite时文件大小的基础上增加到100%且文件大小达到64M触发
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
在AOF rewrite时文件大小的基础上增加到100%且文件大小达到64M触发
AOF优点
1、AOF可以更好的保护数据不丢失。
2、AOF文件在发生断电等问题时也不会损坏,即使出现了某条日志只写入了一半的情况,也可以使用redis-check-aof工具轻松修复。
3、适合做灾难性的误删除紧急恢复
AOF的缺点
1、AOF文件通常比RDB文件更大
2、性能消耗比RDB高
3、数据恢复速度比RDB慢
Redis的主从复制架构
编辑从节点redis.conf的slaveof masterip 6379
从节点只能读取数据
Redis当中的Sentinel(哨兵)架构(Redis高可用解决方案)
由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器及下属服务器
被监控的主服务器下线后,自动将该主服务的某个下属服务升级为新的主服务器
旧的其它下属服务器会被复制到新的主服务器下
sentinel.conf文件配置
操作。
#修改bind配置,每台机器修改为自己对应的主机名
bind node01
#配置sentinel服务后台运行
daemonize yes
#修改三台机器监控的主节点
sentinel monitor mymaster node01 6379 2
#mymaster是自定义集群名,2表示需要被大于等于2个sentinel的服务监控到下线才会触发failover操作
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
#修改bind配置,每台机器修改为自己对应的主机名
bind node01
#配置sentinel服务后台运行
daemonize yes
#修改三台机器监控的主节点
sentinel monitor mymaster node01 6379 2
#mymaster是自定义集群名,2表示需要被大于等于2个sentinel的服务监控到下线才会触发failover操作
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
Redis集群
介绍
Redis 集群是一个提供在多个Redis节点之间共享数据的程序集
特点
缓存永不宕机
迅速恢复数据
持久化数据、容错
Redis可以使用集群所有节点内存
横向扩展增加内存
计算能力随增加服务器而提升
横向提升计算能力
Redis集群没有中心节点,去中心化,不会因为某个节点成为整个集群的性能瓶颈
异步处理数据,实现快速读写
优化
尽量使用短的key,见名知意
避免使用keys * ,这个命令是阻塞的
使用合适的数据结构
0 条评论
下一页