redis学习总结

1、 什么是redis?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。官网:redis.io
百度百科:https://baike.baidu.com/item/Redis/6549233
windows版本下载:https://github.com/MSOpenTech/redis
2、 redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
3、 redis安装部署

  1. 安装gcc(因为redis是c编写的):yum install gcc-c++
  2. 源码下载:从官网下载:redis.io。将redis-*.tar.gz拷贝到/usr/local下。
  3. 解压源码:tar -zxvf redis-*.tar.gz
  4. 进入redis-:cd redis-
  5. 编译:make
  6. 安装到指定目录,如 /usr/local/redis
    cd /usr/local/redis-3.0.0
    make PREFIX=/usr/local/redis install
    安装好了
  7. 运行下看看:./redis-server
    redis学习总结
    运行成功了。
    但是这样启动方式是前端启动,但是不能关闭,一关闭服务就关闭了。
  8. 配置后端启动:
    redis.conf是redis的配置文件,redis.conf在redis源码目录。
    注意修改port作为redis进程的端口,port默认6379。
     拷贝配置文件到安装目录下
    进入源码目录,里面有一份配置文件 redis.conf,然后将其拷贝到安装路径下
    cd /usr/local/redis
    cp /usr/local/redis-*/redis.conf /usr/local/redis/bin
    1)将 redis.conf 的daemonize 改为 yes
    2)设置内存最大使用量:
    //maxmemory 2147483648 #2G
    3)修改redis访问权限:
    //bind 0.0.0.0 #所有人都可访问
    //bind 192.168.1.100 127.0.0.1 #指定内网ip访问
    启动:./bin/redis-server ./redis.conf

4、 常用命令
 关闭redis :./bin/redis-cli shutdown
 启动redis客户端:./bin/redis-cli
 指定链接redis的主机和端口启动:./bin/redis-cli –h ip –p 6379
 启动redis服务:./bin/redis-server ./bin/redis.conf
 测试是否连通:ping
 使用set和get可以向redis设置数据、获取数据。
 del删除指定key的内容。例如:del name
 Keys * 查看当前库中所有的key值
 一个redis实例最多可提供16个数据库。Select 0 //0数据库
 Flushall 清空数据。会清空所有数据库的数据

5、 Redis的优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe 通知, key 过期等等特性
支持事务
与memcached相比: 1. memcached所有的值均是简单字符串,redis支持丰富的数据类型 2. redis速度比memcached快很多 3. redis可持久化其数据
Jedis

6、 Redis持久化方式:
RDB:在指定时间间隔内生成数据集的时间点快照。
优点:RDB是一个非常紧凑的文件,它保存了Redis在某个时间点上的数据集。非常适合用于进行备份:比如:每小时备份一次RDB文件,遇上问题可随时还原数据集到不同的版本。非常适合灾难恢复:它只有一个文件,并且内容紧凑,可传输到其他地方。RDB在恢复大数据集时的速度比AOF的恢复速度快;RDB可最大化redis性能,父进程保存RDB文件时要做的是fork一个子进程,然后子进程处理接下来的保存操作,父进程无须执行任何磁盘I/O操作。
缺点:如需要尽量避免在服务器故障时丢失数据,RDB不适合。每隔一段时间保存数据集的状态,一旦故障会丢失这部分数据。每次保存RDB时,redis都要fork()一个子进程,并由子进程进行实际的持久化工作。在数据集庞大时,fork()会很耗时,造成服务器在某毫秒内停止处理客户端。
redis.conf里rdb相关配置:
save 900 1 # 900秒有1个更改,进行数据同步
save 300 10 # 300秒有10个更改,进行数据同步
save 60 10000 # 60秒有10000更改,进行数据同步
dbfilename dump.rdb # 指定rdb备份数据的文件名
AOF :记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据库 。
优点:让redis更耐久,你可以设置不同的 fsync 策略,比如无 fsync ,每秒钟一次 fsync ,或者每次执行写入命令时 fsync 。 AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。AOF 文件是一个只进行追加操作的日志文件(append only log), 因此对 AOF 文件的写入不需要进行 seek , 即使日志因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机,等等), redis-check-aof 工具也可以轻易地修复这种问题。Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。 导出(export) AOF 文件也非常简单: 举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。
缺点:对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。
redis.conf里AOF的相关配置:
appendonly yes //启用aof持久化方式
appendfilename appendonly.aof // 更新日志文件名,默认为appendonly.aof
appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用 appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐 appendfsync no //完全依赖os,性能最好,持久化没保证。

7、 Redis集群
Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
https://www.cnblogs.com/yingchen/p/6763524.html