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');

Redis简明教程的更多相关文章

  1. Gevent简明教程

    Gevent简明教程  发表于 2015-11-28 |  分类于 技术| |  阅读次数 5159 前述 进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程.多线程.协程和异步. 多 ...

  2. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  3. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  4. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  5. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

  6. 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)

        界面的显示方面就都讲完啦,下面来介绍下控件的响应.     前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...

  7. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

  8. Mac安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

  9. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

随机推荐

  1. toString() 数组转字符串

    var monthNames = ['Jan', 'Feb', 'Mar', 'Apr']; var myVar = monthNames.toString(); // assigns "J ...

  2. JAVA中的配置文件XML

    一:概念 1.XML  Extensible markup Language 可拓展标记语言 2.功能:存储数据(配置文件,在网络中传输数据) 3.html和xml的区别 3.1xml标记全是自定义的 ...

  3. df -i 100%时处理方法

    晚上正在看文档的时候,运营突然打电话给我说游戏全炸了,都玩不了了: 我立马登上服务器,查看了下各服务是否正常运行,结果运行命令都报Unable to create lock file:  No spa ...

  4. (sealed)密封类及密封方法优缺点

    1. 密封类防止被继承 (有利于代码优化, 由于密封类的不被继承性, 代码在搜索此方法时可以直接定位, 不需要一层层的找继承关系) 只有本程序集可以使用 2. 密封类中不需要再写密封方法(一般密封方法 ...

  5. 49-2015年第6届蓝桥杯Java B组

    1.三角形面积 如图1所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字.   image.png   计算方法: 8 * ...

  6. 20175234 《Java程序设计》第二周学习总结(二)

    学习内容总结 运算符与表达式 If语句.switch语句 break和continue语句 数组和for语句 IDEA的安装和调试 教材学习中的问题和解决过程 在第一次使用IDEA中出现了一些情况,在 ...

  7. Linux查看某个进程的线程

    线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念.当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间.打开的文件),以使叉分开销最小化 ...

  8. Solidity的三种合约间的调用方式 call、delegatecall 和 callcode

    0x00 前言 Solidity(http://solidity.readthedocs.io/en/v0.4.24/) 是一种用与编写以太坊智能合约的高级语言,语法类似于 JavaScript. S ...

  9. 设计模式之模板模式 template

    设计模式 模板模式如果有一个流程如下step1();step2();step3();step4();step5();其中step3() step5()是需要用户自己编写使用其他步骤是固定的那么可以写成 ...

  10. 【ElasticSearch】 安装

    Elasticsearch简介 Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎,能够解决越来越多不同的应用场景 官网地址:https://www.elastic.co ...