设为首页 收藏本站
查看: 934|回复: 1

[经验分享] Redis-linux

[复制链接]

尚未签到

发表于 2018-11-6 08:47:40 | 显示全部楼层 |阅读模式
  Redis
  Redis 是一个开源的,高性能的 key-value 系统,可以用来缓存或存储数据。Redis 数据可以持久化,并且支持多种数据类型:字符串(string),列表(list),哈希(hash),集合(set)和有序集合(sorted set)。能够对关系型数据库起到很好的补充作用。它还提供了多接口多种客户端 Python,Ruby,Erlang,PHP ,可以方便调用。
  持久化:Redis 是一种内存数据库(跟 memcache 类似),在数据存取效率方面很优秀,由于内存中的数据时刻面临丢失的危险,Redis 提供了两种持久化机制,及时将内存中的数据写入磁盘。
  RDB  利用存储快照的方式把内存数据定期写入磁盘,半持久化
  AOF  利用写日志的方式(类似 mysql 的 binlog),每执行一条更改 Redis 数据的命令,就写入到磁盘的一个 aof 文件中
  Redis 默认开启 RDB 模式,关闭 AOF 模式,因为 AOF 更耗资源,但是对数据安全极高,称为全持久化,按需选择哪种模式。
  一、安装 redis
  [root@localhost src]#wget http://download.redis.io/releases/redis-3.0.3.tar.gz
  [root@localhost redis-3.0.3]#make
  [root@localhost redis-3.0.3]#make install
  二、redis制定到目录
  [root@localhost redis-3.0.3]# mkdir/usr/local/redis
  [root@localhost redis-3.0.3]# cd/usr/local/redis
  [root@localhost redis]# cp../src/redis-3.0.3/redis.conf  .
  [root@localhost redis]# cp../src/redis-3.0.3/src/redis-cli  .
  [root@localhost redis]# cp../src/redis-3.0.3/src/redis-server  .
  [root@localhost redis]# cp../src/redis-3.0.3/src/redis-sentinel  .
  [root@localhost redis]# cp../src/redis-3.0.3/src/redis-benchmark  .
  [root@localhost redis]# cp../src/redis-3.0.3/src/redis-check-aof  .
  [root@localhost redis]# cp../src/redis-3.0.3/src/redis-check-dump .
  说明:
  # redis.conf       主配置文件
  # redis-cli       命令行操作工具
  # redis-server     启动程序
  # redis-sentinel   集群管理工具
  # redis-benchmark  性能测试工具,测试 redis 在当前系统配置下的读写性能
  # redis-check-aof  更新日志检查,--fix 可以修复 log 文件
  # redis-check-dump 检查本地数据文件
  三、主文件配置(redis.conf)
  [root@localhost redis]# mv redis.confredis.conf.bak
  [root@localhost redis]# vim redis.conf
  daemonize yes    # 以守护进程方式启动
  pidfile /var/run/redis.pid  # 定义 PID 文件存放路径
  port 6379         # 默认监听端口
  timeout 300       # 请求超时时间
  loglevel debug    # 定义日志级别
  logfile/usr/local/redis/logs/redis.log    # 定义日志文件路径
  databases 16    # 启动数据库实例数,默认连接的数据库为 0 ,可以通过 select N 来连接不同的数据库
  save 900 1
  save 300 10
  save 60 10000
  # 从内存保存数据到磁盘的策略
  # 当有 1 条 keys 数据改变时,900 秒刷新到磁盘一次
  # 当有 10 条 keys 数据改变时,300 秒刷新到磁盘一次
  # 当有 1W 条 keys 数据改变时,60 秒刷新到磁盘一次
  rdbcompression yes     # dump .rdb 数据库时,是否压缩数据对象
  dbfilename dump.rdb    # dump 数据库时,数据库保存的文件名
  dir /usr/local/redis/data/    # dump 时数据库保存路径
  #-----------------------------------------------------------------------------------------------------
  appendonly no    # 是否开启日志功能,如果开启每次操作都会记录一条日志,相当于 mysql 的 binlog ,但是会影响效率
  #appendfilename appendonly.aof    # AOF 文件的默认文件名
  #appendfsync everysec
  # 同步数据到磁盘的规则,
  # no 不主动写入磁盘,依赖与系统的写入,一般 30 秒左右写入一次,性能最好,但是持久化没有保证。
  # everysec 每秒强制写入磁盘一次,在性能跟持久化方面折中,推荐使用。
  # always 每次收到写操作就立即强制写入磁盘,是最有保证的完全持久化,但是速度慢。
  #no-appendfsync-on-rewrite yes      # 在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成磁盘 IO 上的冲突
  #auto-aof-rewrite-percentage 100    # 当前 AOF 文件的大小是上次日志重写得到的 AOF 文件大小的两倍时,自动启动新的日志重写过程
  #auto-aof-rewrite-min-size 64mb     # 当前 AOF 文件启动新的日志重写过程的最小值,避免刚启动 redis 时由于文件较小导致频繁重写
  #-----------------------------------------------------------------------------------------------------
  # 设置在向客户端应答时,是否把较小的包合并为一个包发送
  四、启动redis
  [root@localhost~]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
  [root@localhost~]# sysctl vm.overcommit_memory=1
  # 调整内核参数,如果不调整 redis 会报一个警告信息
  [root@localhost~]# mkdir /usr/local/redis/data    # 创建 data 目录
  [root@localhost~]# mkdir /usr/local/redis/logs    # 创建 logs 目录
  [root@localhost~]# redis-server /usr/local/redis/redis.conf   # 启动 redis ,需要指定配置文件路径
  [root@localhost~]# netstat -anpt | grep redis
  tcp0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1176/redis-server
  五、正常测试 Redis
  [root@localhostredis]# redis-cli
  127.0.0.1:6379>set jiang 123
  OK
  127.0.0.1:6379>get jiang
  "123"
  # 登陆本机的 redis , 写入 keys/value , 读取 keys
  [root@localhostredis]# ll /usr/local/redis/data/
  total0
  # 没有生成 dump.rdb ,因为半持久化的 save 规则没有触发
  [root@localhost~]# redis-cli shutdown  #当关闭 redis 的时候,会将内存中的数据保存为 dump.rdb
  [root@localhostredis]# ll /usr/local/redis/data/
  total4
  -rw-r--r--.1 root root 29 Jul 31 03:20 dump.rdb
  [root@localhost~]# redis-server /usr/local/redis/redis.conf
  [root@localhost~]# redis-cli
  redis127.0.0.1:6379> get jiang
  "123"
  redis127.0.0.1:6379> quit
  #redis 启动后从 dump.rdb 文件中读取数据,所以数据依然存在
  六、故障测试redis
  [root@localhost~]# rm -rf /usr/local/redis/data/*    # 删除数据文件,重新测试
  点击(此处)折叠或打开
  [root@localhost~]# redis-cli
  redis127.0.0.1:6379> set jiang abcdef
  OK
  redis127.0.0.1:6379> get jiang
  "abcdef"
  redis127.0.0.1:6379> quit
  [root@localhost~]# kill -9 `cat /var/run/redis.pid `
  # 当不是正常关闭 redis 时,如 kill -9 、redis 服务器突然宕机等
  [root@localhost~]# ls /usr/local/redis/data/
  # 是不会将内存中的数据同步到磁盘的,也就是说不会生成 dump.rdb 文件
  [root@localhost~]# redis-server /usr/local/redis/redis.conf
  [root@localhost~]# redis-cli
  redis127.0.0.1:6379> get jiang
  (nil)
  redis127.0.0.1:6379> quit
  # 这时启动 redis ,发现数据丢失了。可通过启动AOF全持久化解决,但是影响性能。
  Redis AOF 全持久化
  redis AOF持久化,将每次接收到更改 redis 数据的操作都记录到一个 aof 文件,当服务器意外宕机或 redis 服务器非法关闭时,不会丢失数据。可以做到数据安全化,但是性能会受到影响。
  一、主要是修改 redis.conf
  修改部分:
  #save900 1
  #save300 10
  #save60 10000
  #rdbcompressionyes
  #dbfilenamedump.rdb
  # 关闭 RDB 持久化
  appendonlyyes
  appendfilenameappendonly.aof
  appendfsynceverysec
  # 开启 AOF 持久化,定义 aof 文件名,定义同步磁盘规则为每秒强制同步
  no-appendfsync-on-rewriteyes
  auto-aof-rewrite-percentage100
  auto-aof-rewrite-min-size64mb
  # 由于 AOF 的特性是记录每次操作,当客户端执行相同的操作时,aof 也会记录这些相同的每次操作,那么 aof 文件会不断增加。对于这个问题,可以使用 aof 文件的重写功能解决 aof 文件的增长。当 aof 文件满足一定条件时就对 aof 进行重写,重写是根据当前内存数据库中的数据进行遍历到一个临时的 aof 文件,写完后替换原来的 aof 文件。
  说明:
  #no-appendfsync-on-rewrite    参数表示在重写期间对新接收到的写操作不同步,暂时存在内存中,等重写完后再写入,防止与磁盘 IO 冲突。
  #auto-aof-rewrite-percentage  参数表示 aof 文件增长率大于这个值并且同时 aof 文件大于下面参数值时,触发 aof rewrite
  #auto-aof-rewrite-min-size    参数表示当前 aof 文件大小大于这个值时
  2、测试 Redis AOF 持久化
  [root@localhostredis]# redis-server /usr/local/redis/redis.conf
  [root@localhostredis]# ls /usr/local/redis/data/
  Appendonly.aof             # 生成一个 .aof 的空文件
  [root@localhostredis]# redis-cli   #设置key-value值
  127.0.0.1:6379>set test1 123
  OK
  127.0.0.1:6379>set test2 456
  OK
  127.0.0.1:6379>set test3 789
  OK
  127.0.0.1:6379>quit
  #查看appendonly.aof的记录情况
  [root@localhostredis]# cat data/appendonly.aof
  *2
  $6
  SELECT
  $1
  0
  *3
  $3
  set
  $5
  test1
  $3
  123
  *3
  $3
  set
  $5
  test2
  $3
  456
  *3
  $3
  set
  $5
  test3
  $3
  789
  # 记录了每一次操作
  [root@localhostredis]# kill -9 `cat /var/run/redis.pid`
  # 像测试 RDB 一样,非法关闭 redis
  [root@localhostredis]# ./redis-server /usr/local/redis/redis.conf
  [root@localhostredis]# redis-cli
  127.0.0.1:6379>get test1
  "123"
  127.0.0.1:6379>get test2
  "456"
  127.0.0.1:6379>get test3
  "789"
  # 启动测试 keys/value 都存在。
  # 建议使用 AOF 持久化的同时也使用 RDB 半持久化,AOF 的优先级是高于 RDB 的,也就是说启动服务时是先加载 AOF ,后加载 RDB 的。
  # 当 Redis 服务器磁盘坏掉时,数据如何保证不丢失? Master / slave 的方式解决!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631315-1-1.html 上篇帖子: redis 队列操作的例子(php) 下篇帖子: Redis Cluster的实现和管理

尚未签到

发表于 2018-11-6 09:05:03 | 显示全部楼层
好东西,确实值得操作

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表