Redis是一个全开源免费的,用C语言编写的,是一个单线程、高性能的内存数据库,是基于内存运行并支持持久化的nosql数据库,是一个key-value数据库;
Redis主要是用来做缓存,但不仅仅只能做缓存,比如:redis实现分布式锁、队列、回话缓存;
Redis:
**(1)**支持持久化,有RDB持久化和AOF持久化两种方式;
持久化就是将内存中的数据写入到硬盘中;而如果Redis突然出错罢工了。那么Redis中缓存的数据就有可能丢失,所以利用持久化功能,将其内存中的数据写入到硬盘中,这样就能最大限度的降低数据丢失的风险;
RDB持久化:将redis执行命令之后得到的数据保存到硬盘上,当服务器重启的时候会直接将这些数据再写入到redis的缓存中;
AOF持久化:将所有的执行命令保存到硬盘上,当服务器重启的时候会重新执行这些命令来恢复原始的数据;
**(2)**数据类型有String、list、set、hash、zset;
String:最基本的数据类型,二进制安全的字符串;
list:按照添加顺序存放的字符串列表;
set:无序的字符串集合,元素不能重复;
hash:key-value形式的,存放键值对的集合;
zset:排序的字符串集合
使用场景:
string·:可以用来存放JPG图像、序列化的对象、
list:因为里面是按添加的顺序存放的,所以可以用来用来做消息队列
set:因为里面存放的数据不能重复,所以可以用来做好友列表
hash:因为里面存放的是key-value形式,所以可以用来存放个人信息
**(3)**支持数据备份,redis使用哨兵(Sentinel)和复制(Replication)来完成该功能:
Sentinel管理多个redis服务器,用来监控redis、提醒redis以及自动的转移故障,在主服务器进入下线状态时,并自动的从备份的服务器中选举出新的主服务器;
Replication让一个redis服务器配备多个备份的服务器;
**(4)**redis的命令执行是原子性的,但是redis的事务执行不具备原子性;
**(5)**redis事务一次可以执行多条命令,但因为redis是单线程的,所以服务器在执行命令期间,不会去执行其他客户端的命令请求;
**(6)**事务中的多条命令被一次性发送给服务器,而不是一条一条的发送,这样子可以减少客户端与服务器端之间的网络通信次数从而提升性能;