1、Redis是什么:
redis是内存中的数据结构存储系统,它可以作数据库、缓存和消息代理。它支持多种类型的数据结构:字符串strings、列表lists、散列 hashes、集合sets、有序集合sorted sets(zset)。它可以持久化数据到磁盘中,也可以通过主从复制的特性,提高访问速度。使用redis进行数据缓存可以极大的提高系统的响应速度。它是key-value型的数据库
2 数据结构:
字符串String : 可以存储字节串、整数、浮点数。可以对数值进行自增、自减等。
主要命令:get set del incr(自增)、decr(自减)
列表list:一个列表结构可以有序的存储多个字符串,一个键对应多个值
主要命令: lpush rpush lpop rpop lindex(根据索引获取单个元素) lrange(获取该范围上的所有值)
集合 set:列表中存储多个字符串,并且字符串不重复
主要命令: sadd、spop、srem、semembers(返回集合包含的所有元素)、sismember(检查给定元素是否存在在集合 中)
散列hash : 可以存储多个键值对之间的映射
主要命令:hset、hget、hgetAll、hdel、hlen
有序集合zset: 存储着成员与分值之间的映射。根据分值进行排序
主要命令: zadd、zrem、zrank(获取排名)
3、事务
redis的事务基于 multi、exec、watch、unwatch、discard。这五个命令可以让用户在不被打断的情况下执行多个操作。
被multi和exec包裹的所有命令一个接一个地执行,直到所有命令执行完毕为止,是串行化执行
4、持久化
持久化是数据安全的一种保证。它使得redis重启后仍然存在。持久化的方式有:快照和只追加文件。根据自己的时间情况选择其中一个或者全选。
持久化方式:
(1) 快照: 它可以将存在与某一时刻的所有数据都写入硬盘里。
使用命令bgsave创建快照,将会创建一个子进程
save命令创建快照:快照创建完毕之前不会再响应任何其他命令。阻塞当前线程。不常用
缺点: 如果只用快照持久化来保存数据,如果系统崩溃,将会丢失最近一次生成快照之后更改的所有数据
如果redis占用的内存越来越多,bgsave在创建子进程时耗费的时间也会越来越长。所以可以考虑关闭自动保存,通过手动发送bgsave或save进行持久化
(2) AOF(只追加文件)
aop:该持久化将被执行的写命令写到AOF文件的末尾。 同步的选项有always、everysec、no。
always :每个redis写命令都要同步写入硬盘,会严重降低redis速度。
everysec: 每秒执行一次同步,显式地将多个写命令同步到硬盘。用户最多和丢失一秒之内产生的数据
no:让操作系统来决定应该何时进行同步。系统崩溃时会丢失不定的数据。
问题: 体积不断增大的AOF文件会占据磁盘大量空间。而且执行还原操作时的时间可能会很长
解决办法:发送bgrewriteAOF命令,通过移除冗余命令来重写aof文件
5、复制
复制可以让其他服务器拥有一个不断更新的数据副本,从而使得拥有数据副本的服务器可以处理客户端发送的请求。
一个主服务器向多个服务器发送更新,并使用从服务器来处理所有读者请求。
过程: 从服务器连接主服务器-----》主服务器执行bgsave创建快照,将快照发送给你从服务器-----》从服务器丢弃所有旧的数据,执行主服务器发来的快照