>  기사  >  백엔드 개발  >  PHP 데이터베이스 Redis 사용 및 분석

PHP 데이터베이스 Redis 사용 및 분석

墨辰丷
墨辰丷원래의
2018-05-18 14:21:571212검색

이 글은 주로 PHP 데이터베이스 운영에서 Redis의 사용법을 소개하고 있으며, PHP에서 Redis를 설치하고 사용하는 단계와 방법, 관련 주의사항을 예제 형식으로 자세히 분석하고 있습니다.

자세한 내용은 다음과 같습니다.

memcache는 사용하기 쉽고 데이터베이스 동시성이 높을 때 IO 문제를 해결하지만 아직 해결해야 할 문제가 많습니다.

1. Memcache는 저장을 위해 메모리를 사용합니다. 다운되면 저장된 모든 데이터가 손실됩니다.

2. Memcache는 단일 데이터 유형을 저장하고 키-값 데이터만 지원합니다. 복잡한 유형의 데이터를 저장하려면 필연적으로 PHP 스크립트에 많은 수의 논리 연산이 필요합니다.

redis 기본 소개

redis는 메모리 내 비관계형 데이터베이스이기도 하며 데이터 저장 측면에서 Memcache의 모든 장점을 갖추고 있으며 Memcache를 기반으로 합니다. (Memcache에 대한 소개는 이전 기사를 참조하세요. http://www.jb51 .net/article/121315.htm

데이터 지속성 기능을 추가했으며, redis는 RDB 및 AOF를 사용하여 데이터 지속성을 달성하고 서버가 갑자기 다운될 때 저장된 거의 모든 데이터를 유지할 수 있습니다.
추가되었습니다. . String(string), set(set), sorted_set(ordered set), hash(hash), list(linked list) 데이터 유형은 다중 유형 저장 및 데이터베이스 작업을 용이하게 합니다.
보안 검증 추가(서버에 사용 가능.
redis의 마스터-슬레이브 분리 시스템이 더욱 완벽해졌습니다(공식 개발).
기본적으로 게시/구독, 대기열, 캐시 및 기타 도구를 지원합니다.

물론 데이터베이스 작업도 Memcache보다 더 복잡합니다.

Redis 애플리케이션 시나리오 및 설치

Memcache를 사용할 수 있는 곳 외에도 Redis는 다음 용도로도 사용할 수 있습니다.

링크된 목록을 사용하여 데이터를 저장하고 최신 정보를 읽을 수 있습니다. 시퀀스 테이블은 데이터를 저장하고 순위 데이터를 읽어옵니다.
컬렉션을 사용하여 관심/팔로우 정보를 저장할 수 있습니다.

공식 홈페이지(http://redis.io/)에서 최신 버전을 다운로드하고 압축을 풉니다. redis는 공식이기 때문에 직접적으로 make/make test를 하시면 됩니다.

설치가 완료되면 설치 패키지에 있는 redis conf 파일을 bin 디렉토리에 넣어주세요. 설치 디렉터리의 구성이며 redis를 시작하는 데 필요합니다.

또한 설치 디렉터리 파일

redis-benchmark 아래의 bin 디렉터리에 다음 파일이 있습니다. //성능 테스트 도구 -n xxx는 발급을 의미합니다. xxx 명령 redis-check- aof //aof 로그 확인 도구
redis-check-dump //rbd 확인 도구 log
redis-cli //클라이언트
redis-server //Redis 서버 프로세스
redis-sentinel //Redis 센티널 모드 프로세스

vim을 사용하여 redis.conf를 열어 redis 서버를 간단히 구성합니다.

daemonize 옵션을 yes로 변경하여 백그라운드에서 실행합니다.

database n n개의 서버(기본값)로 Redis 서버 설정 는 0~15, 총 16개입니다.
port.n은 Redis 서버의 수신 포트를 설정합니다.
requirepass yourpassword를 설정하여 비밀번호를 설정합니다. 클라이언트가 연결된 후 인증 비밀번호를 사용하여 확인을 통과합니다. /redis-server ./redis.conf Redis 서버를 여는 명령입니다.

./redis-cli [-p port]를 사용하여 서버에 연결합니다(기본값 6379).

redis 명령

기본(문자열 문자열 유형 포함) 명령

set key value [ex|px n] //设置值[并设置过期时间为n秒/毫秒]
get key //获取值
del key //删除值
incby|decby key n //将key值自增或自减n
rename key newkey//覆盖原来的
select n//选择第n个数据库
ttl key //查询key的过期时间,-1表示永不过期,不存在的为-2
expire key n //设置key的过期时间为n秒 
type key //获取key的存储类型
flushdb //清除当前数据库中的值
shutdown [nosave]//关闭服务器[不存储]

list(연결된 목록) 명령

lpush/rpush list value1 [value2 value3...] //将value压入链表头/尾
lpop/rpop list //弹出链表头/尾的值
llen list //获取链表长度

set 명령

sadd set value //往集合中添加value
smembers set //查看集合中的全部数据
srem set value1[value2...]//删除集合中的元素
sismember set value //判断value是否是集合中的一个元素
ㅋㅋㅋ a부터 b까지 순서화된 목록에 값을 표시합니다. b가 -1인 경우 모두 표시, [각 값의 점수 표시]

zrank/zrevrank sorted_set key 정방향/역방향으로 순서화된 집합에 키를 표시합니다.

zrem sorted_set 키의 위치는 정렬된 집합의 키를 삭제합니다

zcard sorted_set [m n] 정렬된 집합에

hash(해시 유형) 명령이 몇 개 있는지 계산합니다. [m과 n 사이의 점수] hset 해시 집합 키 값 해시 테이블 키 값을 value로 설정

hget hashset key 해시 테이블의 키 값 가져오기

hdel hashset key 해시 테이블에서 키 삭제
hlen hashset 해시 테이블 길이 가져오기

많은 redis 명령이 있습니다 , 여기에 몇 가지 간단한 명령만 나열되어 있습니다. 특정 명령에 대해서는 공식 웹사이트나 중국어 웹사이트 http://www.redis.cn/

redis 거래 및 게시 및 구독

에서 번역 문서를 확인할 수 있습니다.


redis와 mysql의 트랜잭션은 유사하지만 명령문만 약간 다릅니다.

        redis        mysql
开始事务    multi      start transition
          事务中的query语句
执行事务    exec        commit
回滚事务    discard       roll back

redis에는 watch 문 제어 기능이 있습니다. watch 문에서 모니터링하는 키 값이 트랜잭션이 제출되기 전에 변경되면 트랜잭션이 자동으로 취소되고 롤백됩니다. watch key1 [key2...]unwatch 모든 모니터링을 취소합니다.

redis原生发布和订阅功能,它类似于设计模式中的观察者模式,被订阅对象一旦发布了新的消息,那么所有订阅对象都会收到这条消息。使用方式为:

subscribe key //订阅某个key,如果这个key发布了新的消息,则会收听到
public key value//发布消息key,值为value,返回值是收到这个消息的人的个数
unsubscribe key //取消监听
psubscribe key1 key2/pattrn //[根据模式]监听多个key


redis的数据持久化

redis通过rdb和aof两种方式实现数据持久化,两种数据持久化方式都会占用CPU资源,拖慢redis的执行效率,一般两种模式配合使用。

rdb方式的主要原理就是达到某一写入条件后把内存中的所有数据的快照保存一份到磁盘上,数据恢复时用数据快照恢复。

aof方式是通过将每条redis执行命令记录入文本文件,恢复数据时重复执行记录的命令。

rdb方式实现数据持久化

用save/bgSave命令可以主动使用rdb方式[后台]存储rdb

修改redis.conf文件进行配置

save m n          //在m秒内有n次修改即进行一次快照,保存点很重要,一般会配置多个条件,满足其中之一就保存
stop-writes-on-bgsave-error yes //在进行快照的过程中如果出错,则停止写入
rdbcompression yes     //设置进行数据压缩
rdbchecksum yes       //导入数据时检查文件是否损坏
dbfilename xxx.rdb     //导出的文件名
dir path          //导出的文件路径

aof方式实现数据持久化

aof持久化的问题在于将每条指令都记录下来,即使是对一个键的反复操作,这样会导致aof文件越来越大,使用aof重写将会大大减小aof文件的体积,因为它是在最后将数据库内数据的状态统一逆化为命令,而不论一个key经过了多少次变化。使用 bgrewrite 命令可手动重写aof文件。

配置redis.conf文件:

noapppendfsync-on-rewrite yes    //设置导出rdb时停止写入aof,aof会被写在内存队列里,dump rdb 完成后统一进行写入操作。
appendfsync everysec        //每秒写入一次
appendfilename           //path/filename.aof
auto-aof-rewrite-percentage 100   //文件大小增长100%时重写
auto-aof-rewrite-min-size 64m    //文件至少达到64m时重写

redis的主从复制

主从复制时,主从都要以自己的.conf文件来启动服务器。主服务器可以将rdb关闭,以从服务器来产生rdb,加快主服务器的速度。

从服务器复制一个redis6380.conf文件,设置端口,pid存放文件,只读,主服务器的密码。

port 6380
pidfile filename
slave-read-only yes
masterauth password

设置完成后,分别用不同的conf文件打开服务器。

考虑到主服务器宕机的情况,我们用sentinel redis哨兵来监测服务器状态,在主服务器宕机之后做出反应。sentinel是redis集成的,我们只需要将安装包里的sentinel.conf文件拷贝到redis/bin目录下,使用redis-sentinel进程文件来启动服务器即可。

port 26379                    //sentinel监听的端口号
daemonize yes                  //后台启动进程
sentinel monitor mymaster 192.168.100.211 6379 2 //设置主进程ip和端口号,并设置两个哨兵发现主服务器长时间无法连接才判定其宕机
sentinel down-after-milliseconds mymaster 30000 //30000毫秒连接不上判定为无法连接
sentinel parallel-syncs mymaster 1        //一个主服务器打开时,同时复制的从服务器数,太大的话会造成服务器瞬间拥堵
sentinel failover-timeout mymaster 900000    //在90000秒内哨兵不再试图恢复原主服务器

PHP操作redis服务器

安装好php的redis扩展后(具体可参考前面的文章 Linux下php安装Redis扩展的方法 http://www.jb51.net/article/99775.htm),就可以直接使用redis的类函数库了。

如下是典型的redis应用。

$redis=new Redis();           //实例化一个Redis对象
$redis->connect('host',port);      //连接redis服务器
$redis->auth('password');        //用密码认证
$redis->set($key,$value[,$expire_time]);//设置一个值
$content=$redis->get($key);       //获取值

相关推荐:

laravel使用Redis实现网站缓存读取实现步骤详解

CodeIgniter使用redis步骤详解

PHP操作Redis步骤详解

위 내용은 PHP 데이터베이스 Redis 사용 및 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.