Redis优势:
1.性能极高– Redis能读的速度是110000次/s,写的速度是81000次/s 。
2.丰富的数据类型– Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3.原子– Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务)
4.丰富的特性– Redis还支持 publish/subscribe, 通知, key 过期等等特性。
安装(我一般安装在服务器):
源码包下载链接:http://download.redis.io/releases/
安装依赖:yum install gcc-c++
下载后解压缩,make && make install即可
启动:
可启动多个redis,复制配置文件,修改其端口即可
后台进程运行:把配置文件中的daemonize no 为 yes
Eg:./src/redis-server redis.conf
连接:
Eg:./src/redis-cli -h 指定ip -p 指定端口 -a 指定密码
也可以用桌面工具连接:RedisDesktopManager
使用:
1.Redis自己安装一般有十五个仓库;
Eg:切换1仓库 select 1;
[if !supportLists]2. [endif]redis有五种类型:字符串,集合,有序集合,哈希,列表
字符串: key-value
集合:是String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
有序集合:有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复
哈希:是一个string类型的field和value的映射表,Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
列表:列表是简单的字符串列表,按照插入顺序排序
Eg:
哈希值设置:HSET myhash field1 "foo"
哈希值获取:HGET myhash field1
具体每种类型的语法文档描述的很清晰了:https://www.runoob.com/redis/redis-strings.html
[if !supportLists]3. [endif]订阅
发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息
[if !supportLists]4. [endif]事务
单个Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
持久化:
Rdb(默认):RDB持久化方式是通过快照(snapshotting)完成的,当符合一定条件时,redis会自动将内存中所有数据以二进制方式生成一份副本并存储在硬盘上。当redis重启时,并且AOF持久化未开启时,redis会读取RDB持久化生成的二进制文件(默认名称dump.rdb,可通过设置dbfilename修改)进行数据恢复,对于持久化信息可以用过命令“info Persistence”查看
优点:
1.RDB 是一个非常紧凑(compact)的文件,体积小,因此在传输速度上比较快,因此适合灾难恢复。
2.RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。
3.RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
缺点:
1.RDB是一个快照过程,无法完整的保存所以数据,尤其在数据量比较大时候,一旦出现故障丢失的数据将更多。
2.当redis中数据集比较大时候,RDB由于RDB方式需要对数据进行完成拷贝并生成快照文件,fork的子进程会耗CPU,并且数据越大,RDB快照生成会越耗时。
3.RDB文件是特定的格式,阅读性差,由于格式固定,可能存在不兼容情况。
Aof(默认关闭):当redis存储非临时数据时,为了降低redis故障而引起的数据丢失,redis提供了AOF(Append Only File)持久化,从单词意思讲,将命令追加到文件。AOF可以将Redis执行的每一条写命令追加到磁盘文件(appendonly.aof)中,在redis启动时候优先选择从AOF文件恢复数据。由于每一次的写操作,redis都会记录到文件中,所以开启AOF持久化会对性能有一定的影响,但是大部分情况下这个影响是可以接受的,我们可以使用读写速率高的硬盘提高AOF性能。与RDB持久化相比,AOF持久化数据丢失更少,其消耗内存更少(RDB方式执行bgsve会有内存拷贝)。
优点:
1.数据更完整,秒级数据丢失(取决于设置fsync策略)。
2.兼容性较高,由于是基于redis通讯协议而形成的命令追加方式,无论何种版本的redis都兼容,再者aof文件是明文的,可阅读性较好。
缺点:
1.数据文件体积较大,即使有重写机制,但是在相同的数据集情况下,AOF文件通常比RDB文件大。
2.相对RDB方式,AOF速度慢于RDB,并且在数据量大时候,恢复速度AOF速度也是慢于RDB。
3.由于频繁地将命令同步到文件中,AOF持久化对性能的影响相对RDB较大,但是对于我们来说是可以接受的。