php-redis笔记

介绍

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

* Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

* Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

* Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

* Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

* Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Table of contents

数据结构

String: 字符串]

Hash: 散列

List: 列表

Set: 集合

Sorted Set: 有序集合

Redis安装

1. 下载并解压

首先从Redis官网下载Redis并解压,楼主使用的版本是4.0.2。依次执行如下命令:

cd /usr/local/

wget http://download.redis.io/releases/redis-4.0.2.tar.gz

tar -zxvf redis-4.0.2.tar.gz

如果没有安装gcc依赖包,则安装对应依赖包

yum install -y gcc-c++ tcl

2. 编译并安装

下载并解压完毕后,则对源码包进行编译安装,楼主的Redis安装路径为/usr/local/redis,同学们可以自行修改语句:make install PREFIX=你想要安装的路径

cd /usr/local/redis-4.0.2/

make install PREFIX=/usr/local/redis

复制Redis相关命令到/usr/sbin目录下,这样就可以直接执行这些命令,不用写全路径

cd /usr/local/redis/bin/

sudo cp redis-cli redis-server redis-sentinel /usr/sbin/

3. 建立Redis配置文件

安装完成之后将 Redis 配置文件拷贝到系统配置目录/etc/下,redis.conf 是 Redis 的配置文件,redis.conf 在 Redis 源码目录,port默认 6379。

cp /usr/local/redis-4.0.2/redis.conf /etc/

Redis配置文件主要参数解析参考

daemonize no #redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)

pidfile /var/run/redis.pid #指定redis进程的PID文件存放位置

port 6379 #redis进程的端口号

bind 127.0.0.1 #绑定的主机地址

timeout 300 #客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能

loglevel verbose #redis日志级别,可用的级别有debug.verbose.notice.warning

logfile stdout #log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了

databases 16 #设置数据库的数量,默认为0可以使用select 命令在连接上指定数据库id

save #指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件;

rdbcompression yes #指定存储至本地数据库时是否压缩文件,默认为yes即启用存储;

dbfilename dump.db #指定本地数据库文件名

dir ./ #指定本地数据问就按存放位置;

slaveof #指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步

masterauth #当master设置了密码保护时,slave服务连接master的密码;

requirepass footbared #设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH命令提供密码,默认关闭

maxclients 128 #设置同一时间最大客户连接数,默认无限制;redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

maxmemory #指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

appendonly no #指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

appendfilename appendonly.aof #指定跟新日志文件名默认为appendonly.aof

appendfsync everysec #指定更新日志的条件,有三个可选参数no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);

3.1 设置后端启动:

由于Redis默认是前端启动,必须保持在当前的窗口中,如果使用ctrl + c退出,那么Redis也就退出,不建议使用。

vi /etc/redis.conf

修改Redis配置文件把旧值daemonize no 改为 新值daemonize yes

3.2 设置访问:

Redis默认只允许本机访问,可是有时候我们也需要 Redis 被远程访问。

vi /etc/redis.conf

找到 bind 那行配置,默认是: # bind 127.0.0.1

去掉#注释并改为: bind 0.0.0.0 此设置会变成允许所有远程访问。如果想指定限制访问,可设置对应的IP。

3.3 配置Redis日志记录:

找到logfile那行配置,默认是:logfile "",改为logfile /var/log/redis_6379.log

3.4 设置 Redis 请求密码:

vi /etc/redis.conf

找到默认是被注释的这一行:# requirepass foobared

去掉注释,把 foobared 改为你想要设置的密码,比如我打算设置为:123456,所以我改为:requirepass "123456"

修改之后重启下服务

有了密码之后,进入客户端,就得这样访问:redis-cli -h 127.0.0.1 -p 6379 -a 123456

####4. Redis常用操作

4.1 启动

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

4.2 关闭

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown

4.3 查看是否启动

ps -ef | grep redis

4.4 进入客户端

redis-cli

4.5 关闭客户端

redis-cli shutdown

4.6 设置开机自动启动配置

echo "/usr/local/redis/bin/redis-server /etc/redis.conf" >> /etc/rc.local

4.7 开放防火墙端口

添加规则:iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT

保存规则:service iptables save

重启 iptables:service iptables restart

5. 将Redis注册为系统服务

在/etc/init.d目录下添加Redis服务的启动,暂停和重启脚本:

vi /etc/init.d/redis

脚本内容如下:

#!/bin/sh

#

# redis - this script starts and stops the redis-server daemon

#

# chkconfig: - 85 15

# description: Redis is a persistent key-value database

# processname: redis-server

# config: /usr/local/redis/bin/redis-server

# config: /etc/redis.conf

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

redis="/usr/local/redis/bin/redis-server"

prog=$(basename $redis)

REDIS_CONF_FILE="/etc/redis.conf"

[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis

lockfile=/var/lock/subsys/redis

start() {

[ -x $redis ] || exit 5

[ -f $REDIS_CONF_FILE ] || exit 6

echo -n $"Starting $prog: "

daemon $redis $REDIS_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

stop

start

}

reload() {

echo -n $"Reloading $prog: "

killproc $redis -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart| reload|orce-reload}"

exit 2

esac

赋予脚本权限

chmod 755 /etc/init.d/redis

启动、停止和重启:

service redis start

service redis stop

service redis restart

Redis主从

1. redis-server说明

172.16.2.185:6379 主

172.16.2.181:6379 从

2. Redis主从架构配置

编辑从机的 Redis 配置文件,找到 210 行(大概),默认这一行应该是注释的:

slaveof

我们需要去掉该注释,并且填写我们自己的主机的 IP 和 端口,比如:slaveof 172.16.2.185 6379,如果主机设置了密码,还需要找到masterauth 这一行,去掉注释,改为masterauth 主机密码。

配置完成后重启从机Redis 服务

重启完之后,进入主机的 redis-cli 状态下redis-cli -h 127.0.0.1 -p 6379 -a 123456,输入:INFO replication

可以查询到当前主机的 Redis处于什么角色,有哪些从机已经连上主机。

主机信息172.16.2.185

# Replication

role:master

connected_slaves:1

slave0:ip=172.16.2.181,port=6379,state=online,offset=28,lag=1

master_replid:625ae9f362643da5337835beaeabfdca426198c7

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:28

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:28

从机信息172.16.2.181

# Replication

role:slave

master_host:172.16.2.185

master_port:6379

master_link_status:up

master_last_io_seconds_ago:3

master_sync_in_progress:0

slave_repl_offset:210

slave_priority:100

slave_read_only:1

connected_slaves:0

master_replid:625ae9f362643da5337835beaeabfdca426198c7

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:210

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:210

此时已经完成了主从配置,我们可以测试下:

我们进入主机的 redis-cli 状态,然后 set 某个值,比如:set myblog YouMeek.com

我们切换进入从机的 redis-cli 的状态下,获取刚刚设置的值看是否存在:get myblog,此时,我们可以发现是可以获取到值的。

3. Redis主从架构总结

需要注意的是:从库不具备写入数据能力,不然会报错。 从库只有只读能力。

主从架构的优点:除了减少主库连接的压力,还有可以关掉主库的持久化功能,把持久化的功能交给从库进行处理。

第一个从库配置的信息是连上主库,后面的第二个从库配置的连接信息是连上第一个从库, 假如还有第三个从库的话,我们可以把第三个从库的配置信息连上第二个从库上,以此类推。

PHP使用Redis

连接到 redis 服务

//连接本地的 Redis 服务

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

echo "Connection to server sucessfully";

//查看服务是否运行

echo "Server is running: " . $redis->ping();

?>

执行脚本,输出结果为:

Connection to server sucessfully

Server is running: PONG

Redis PHP String(字符串) 实例

//连接本地的 Redis 服务

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

echo "Connection to server sucessfully";

//设置 redis 字符串数据

$redis->set("tutorial-name", "Redis tutorial");

// 获取存储的数据并输出

echo "Stored string in redis:: " . $redis->get("tutorial-name");

?>

执行脚本,输出结果为:

Connection to server sucessfully

Stored string in redis:: Redis tutorial

Redis PHP List(列表) 实例

//连接本地的 Redis 服务

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

echo "Connection to server sucessfully";

//存储数据到列表中 将一个或多个值插入到列表头部

$redis->lpush("tutorial-list", "Redis");

$redis->lpush("tutorial-list", "Mongodb");

$redis->lpush("tutorial-list", "Mysql");

// 获取存储的数据并输出

//Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。

//其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。

//你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

$arList = $redis->lrange("tutorial-list", 0 ,5);

echo "Stored string in redis";

print_r($arList);

?>

执行脚本,输出结果为:

Connection to server sucessfully

Stored string in redis

Mysql

Mongodb

Redis

Redis PHP Keys 实例

//连接本地的 Redis 服务

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

echo "Connection to server sucessfully";

// 获取数据并输出

$arList = $redis->keys("*");

echo "Stored keys in redis:: ";

print_r($arList);

?>

执行脚本,输出结果为:

Connection to server sucessfully

Stored string in redis::

tutorial-name

tutorial-list

redis php操作日志,php-redis笔记相关推荐

  1. redis排行榜_java_【Redis 源码日志】- Redis 应用:积分排行榜 - Java 技术驿站-Java 技术驿站...

    积分排行榜是 Redis 的经典应用. 倘若数据都存在数据库中,每次访问网页都需要对所有的数据做排序,对于日访问量大的网站来说,不仅服务器吃不消,用户体验也不佳.在 Redis 中提供了 sorted ...

  2. Redis-学习笔记02【Redis命令操作】

    Java后端 学习路线 笔记汇总表[黑马程序员] Redis-学习笔记01[Redis环境搭建] Redis-学习笔记02[Redis命令操作] Redis-学习笔记03[Redis持久化] Redi ...

  3. spring对redis的操作

    spring对redis的操作 spring对redis的基本操作包括添加string对象,hash对象,list对象,删除key,记录. import java.util.UUID;import o ...

  4. php redis 详细操作

    php redis 详细操作 /*1.Connection*/ 
$redis = new Redis();
$redis->connect('127.0.0.1',6379,1);//短链接, ...

  5. java jredis hset_SpringBoot中 集成 redisTemplate 对 Redis 的操作(四)HSet

    SpringBoot中 集成 redisTemplate 对 Redis 的操作(四)HSet redis 数据结构中,set用于去重,hset 则用于 去重加排序.在hset 中,有两个概念: 1⃣ ...

  6. Spring中RedisTemplate方法中,redis相关操作笔记。[redis生成指定长度自增批次号,删除、设置过期时间等]

    Spring中RedisTemplate方法中,redis相关操作笔记. redis获取自增批次号 // opsForValue()生成long UUID = redisTemplate.opsFor ...

  7. 出招吧!腾讯专家手敲《Redis源码日志笔记》,不服来对打!

    引言 本文分为六个部分,包括 Redis 源码日志,服务框架,基础数据结构,内功心法,应用,其他,从源码层面循序渐进的了解Redis.可以快速.有效地了解Redis 的内部构造以及运作机制,更好.更高 ...

  8. Go 学习笔记(60)— Go 第三方库之 go-redis(初始化 redis、操作 string、操作 list、操作 set、操作 hset)

    1. 第三方库 go-redis 因为 Go 标准库中是没提供 redis 的库,所以我们选择用 go-redis 这个第三方库.源码地址为 https://github.com/go-redis/r ...

  9. 《redis设计与实现》 读书笔记

    <redis设计与实现> 作者:黄健宏 读书笔记 一.前言 什么是redis: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数 ...

最新文章

  1. 搭建Linux0.11系统环境
  2. python大数据分析实例-如何用Python分析大数据(以Twitter数据挖掘为例)
  3. Batch Norm常用方法
  4. React Native集成Redux框架讲解与应用
  5. golang for循环_10. Go语言流程控制:for 循环
  6. 多线程下的进程同步(线程同步问题总结篇)
  7. mysql命令语句来去除掉字段中空格字符的方法
  8. Security+ 学习笔记47 事件响应方案
  9. html让一行文字在两行,css单行两行文本自适应问题
  10. STM32固件库下载步骤
  11. 代码美化网站,让你的代码别具一格
  12. GaRy-Liang的linux成长日记8-RAID阵列
  13. 中国最顶尖的黑客,连外国人都想拜他为师
  14. Git 修改历史 commit 提交信息
  15. Linux上安装Matlab2020a
  16. ACdream1735 输油管道
  17. 微信小程序——小程序中计算属性的使用
  18. html 制作速卖通店招,怎么制作速卖通店招?速卖通店招的尺寸是多少?
  19. WPF的自动折行面板
  20. Linux忘记root密码如何找回

热门文章

  1. html 怎么在画布上绘制一个圆,javascript – 如何在画布上画一个圆圈?
  2. 通信 / 各种协议默认端口汇总
  3. 启明云端分享|在研发过程中常常会遇到各种问题,小编为大家做了SSD201/202 FAQ整理,我会定期给大家整理相关问题,欢迎关注我们CSDN启明云端技术社区!
  4. aix服务器端口配置文件,aix配置(IP,子网掩码,DNS)网络接口的三种方式
  5. Android App层 单独使用SystemProperties
  6. 不用计算机质数的判断,怎么样用电脑编程来判断一个数是否是质数?
  7. decode判断不为空拼接_空指针4月内部赛官方WP
  8. Vue 性能优化--打包优化
  9. jquery基本操作
  10. python批量删缩进_Python工具PyCharm常用快捷键