zoukankan      html  css  js  c++  java
  • Redis简明教程

    redis是什么:

    Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.

    redis是开源,BSD许可,高级的key-value存储系统.

    可以用来存储字符串,哈希结构,链表,集合,因此,常用来提供数据结构服务.

    redis和memcached相比,的独特之处:

    1: redis可以用来做存储(storge), 而memccached是用来做缓存(cache)

      这个特点主要因为其有”持久化”的功能.

    2: 存储的数据有”结构”,对于memcached来说,存储的数据,只有1种类型--”字符串”,

      而redis则可以存储字符串,链表,哈希结构,集合,有序集合.

    Redis下载安装:

    下载源码包:wget http://download.redis.io/releases/redis-3.2.8.tar.gz

    解压:tar zxvf redis-3.2.8.tar.gz

    不用config,直接Make

    安装到指定目录:比如/usr/local/redis

    make  PREFIX=/usr/local/redis install

    注: PREFIX要大写

    make install之后,得到如下几个文件

    redis-benchmark  性能测试工具

    redis-check-aof  日志文件检测工(比如断电造成日志损坏,可以检测并修复)

    redis-check-dump  快照文件检测工具,效果类上

    redis-cli  客户端

    redis-server 服务端

    复制配置文件

    Cp /usr/local/src/redis-3.2.8/redis.conf  /usr/local/redis

    启动与连接

    /usr/local/redis/bin/redis-server  ./usr/local/redis.conf

    客户端连接redis:

    连接: 用redis-cli

    #/usr/local/redis/bin/redis-cli [-h localhost -p 6379 ]  指定主机或端口

    让redis以后台进程的形式运行

    编辑conf配置文件,修改如下内容;

    daemonize yes

    Redis事物处理:

    Redis与 mysql事务的对比

    Mysql

    Redis

    开启

    start transaction

    multi

    语句

    普通sql

    普通命令

    失败

    rollback 回滚

    discard 取消

    成功

    commit

    exec

    注: rollback与discard 的区别

    如果已经成功执行了2条语句, 第3条语句出错.

    Rollback后,前2条的语句影响消失.

    Discard只是结束本次事务,前2条语句造成的影响仍然还在

    Redis的事务中,启用的是乐观锁,只负责监测key没有被改动.

    具体的命令----  watch命令

    Watch可监视多个变量,如果其中之一发生改变,则事物回滚

    如果exec返回nil,说明监视的ticket已经改变了,事务就取消了.

    unwatch 取消所有watch监听

    Redis持久化配置

    Redis的持久化有2种方式   1快照  2是日志

    Rdb快照的配置选项

    save 900 1      // 900内,有1条写入,则产生快照

    save 300 1000   // 如果300秒内有1000次写入,则产生快照

    save 60 10000  // 如果60秒内有10000次写入,则产生快照

    (这3个选项都屏蔽,则rdb禁用)

    stop-writes-on-bgsave-error yes  // 后台备份进程出错时,主进程停不停止写入?

    rdbcompression yes    // 导出的rdb文件是否压缩

    Rdbchecksum   yes //  导入rbd恢复时数据时,要不要检验rdb的完整性

    dbfilename dump.rdb  //导出来的rdb文件名

    dir ./  //rdb的放置路径

    Aof 的配置

    appendonly no # 是否打开 aof日志功能

    appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢

    appendfsync everysec # 折衷方案,每秒写1次

    appendfsync no      # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,

    no-appendfsync-on-rewrite  yes: # 正在导出rdb快照的过程中,要不要停止同步aof

    auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写

    auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

    注意:redis优先使用aof恢复数据

    恢复时rdb比aof快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行

    Redis服务端常用命令:

    time  ,显示服务器时间 , 时间戳(秒), 微秒数

    dbsize  // 当前数据库的key的数量

    select 2 切换数据库

    bgrewriteaof 后台进程重写AOF

    bgsave      后台保存rdb快照

    save         保存rdb快照

    lastsave     上次保存时间

    Flushall  清空所有库所有键

    Flushdb  清空当前库所有键

    Shutdown [save/nosave]  关闭redis服务

    如果不小心运行了flushall, 立即 shutdown nosave ,关闭服务器

    然后 手工编辑aof文件, 去掉文件中的 “flushall ”相关行, 然后开启服务器,就可以导入回原来数据.

    Slowlog 显示慢查询

    由slowlog-log-slower-than 10000 ,来指定,(单位是微秒)

    slowlog-max-len 128 ,来做限制服务器储存多少条慢查询的记录

    Redis运维时需要注意的参数

    1: 内存

    # Memory

    used_memory:859192 数据结构的空间

    used_memory_rss:7634944 实占空间

    mem_fragmentation_ratio:8.89 前2者的比例,1.N为佳,如果此值过大,说明redis的内存的碎片化严重,可以导出再导入一次.

    2: 主从复制

    # Replication

    role:slave

    master_host:192.168.1.128

    master_port:6379

    master_link_status:up

    3:持久化

    # Persistence

    rdb_changes_since_last_save:0

    rdb_last_save_time:1375224063

    4: fork耗时

    #Status

    latest_fork_usec:936  上次导出rdb快照,持久化花费微秒

    注意: 如果某实例有10G内容,导出需要2分钟,

    每分钟写入10000次,导致不断的rdb导出,磁盘始处于高IO状态.

    5: 慢日志

    config get/set slowlog-log-slower-than

    CONFIG get/SET slowlog-max-len

    slowlog get N 获取慢日志

    运行时更改master-slave

    修改一台slave(设为A)为new master

    1) 命令该服务不做其他redis服务的slave

       命令: slaveof no one

    2) 修改其slave-read-only为no

    其他的slave再指向new master A

    1) 命令该服务为new master A的slave

       命令格式 slaveof IP port

    Slaveof master-Host port  , 把当前实例设为master的slave

    主从配置:slaveof  <masterip>  <masterport>

    同时修改port

    监控工具 sentinel

    Sentinel不断与master通信,获取master的slave信息.

    监听master与slave的状态

    如果某slave失效,直接通知master去除该slave.

    如果master失效,,是按照slave优先级(可配置), 选取1个slave做 new master,把其他slave--> new master

    疑问: sentinel与master通信,如果某次因为master IO操作频繁,导致超时,此时,认为master失效,很武断.

    解决: sentnel允许多个实例看守1个master, 当N台(N可设置)sentinel都认为master失效,才正式失效.

    Sentinel选项配置

    port 26379 # 端口

    sentinel monitor mymaster 127.0.0.1 6379 2 ,给主机起的名字(不重即可),当2个sentinel实例都认为master失效时,正式失效

    sentinel down-after-milliseconds mymaster 30000  多少毫秒后连接不到master认为断开

    sentinel can-failover mymaster yes #是否允许sentinel修改slave->master. 如为no,则只能监控,无权修改./

    sentinel parallel-syncs mymaster 1 , 一次性修改几个slave指向新的new master.

    sentinel client-reconfig-script mymaster /var/redis/reconfig.sh ,# 在重新配置new master,new slave过程,可以触发的脚本

    php-redis扩展编译

    1: 到pecl.php.net  搜索redis

    2: 下载stable版(稳定版)扩展

    3: 解压,

    4: 执行/php/path/bin/phpize (作用是检测PHP的内核版本,并为扩展生成相应的编译配置)

    5: configure --with-php-config=/php/path/bin/php-config

    6: make && make install

    引入编译出的redis.so插件

    1: 编辑php.ini

    2: 添加extension=/alidata/server/php/lib/php/extensions/no-debug-non-zts-20100525/redis.so

    redis插件的使用

    https://github.com/phpredis/phpredis

    // get instance

    $redis = new Redis();

    // connect to redis server

    $redis->open('localhost',6380);

    $redis->set('user:userid:9:username','wangwu');

  • 相关阅读:
    pygame中的图像和音乐
    pygame中鼠标画直线
    Python-GUI:button及entry的应用
    Linux查看物理CPU个数、核数、逻辑CPU个数
    阿里云nas使用记录
    字符集错误解决
    firewalld防火墙命令规则设置
    Linux之TCPIP内核参数
    nginx 301跳转https后post请求失效问题解决
    TCP queue 的一些问题
  • 原文地址:https://www.cnblogs.com/cqingt/p/6754971.html
Copyright © 2011-2022 走看看