0

0

PHP数据库redis用法及分析

墨辰丷

墨辰丷

发布时间:2018-05-18 14:21:57

|

1457人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了php数据库操作redis用法,结合实例形式详细分析了php安装、使用redis的步骤、方法与相关注意事项,需要的朋友可以参考下

具体如下:

memcache虽然好用,解决了数据库遇到高并发时的IO问题,但还有很多问题丞待解决:

1、数据持久性问题,memcache用内存进行存储,一旦memcache服务器宕机,那么所存储的数据全部丢失。

2、memcache存储的数据类型单一,只支持key-value型的数据,要存储复杂类型的数据,必然需要PHP脚本的大量逻辑操作。

立即学习PHP免费学习笔记(深入)”;

redis基本介绍

redis也是一个内存非关系型数据库,它拥有memcache在数据存储上的全部优点,而且在memcache的基础上(memcache的介绍可以看前面一篇:http://www.jb51.net/article/121315.htm

增加了数据持久性功能,redis用rdb和aof两种方式实现数据持久性,在服务器突然宕机时也能几乎保留已存的全部数据。
增加了string(字符串)、set(集合)、sorted_set(有序集合)、hash(哈希)、list(链表)数据类型,方便了多类型的存储和数据库操作。
增加了安全验证(可为服务器设置连接密码)。
redis的主从分离等系统更完善(官方开发)。
原生支持发布/订阅、队列、缓存等工具。

当然,相比较memcache,它的数据库操作也较为复杂。

redis的应用场景和安装

redis除了可以用在memcache能用的地方,它还可以用在:

可以用链表来存储数据,读取其最新信息。
可以用有序列表存储数据,读取其排行榜数据
可以用集合来存储关注/被关注信息。

在官网(http://redis.io/)下载到它的最新版本,直接解压,因为redis官方已经编译过了,直接进行make / make test ,在make install时可以指定其安装路径。

安装完成后,将安装包里的redis的conf文件mv到安装目录的bin目录下,它是配置和启动redis所必需的。

除此,安装目录文件下bin目录里还有如下文件。

redis-benchmark //性能测试工具 -n xxx 表示发出xxx条命令用来测试
redis-check-aof //检查aof日志的工具
redis-check-dump //检查rbd日志的工具
redis-cli       //客户端
redis-server    //redis的服务器进程
redis-sentinel //redis哨兵模式的进程

我们用vim打开redis.conf来简单配置redis服务器。

将daemonize 选项改为yes来后台运行
database n 设置一个redis服务器里有n个服务器,默认为0-15共16个
port n 来设置redis服务器的监听端口
设置requirepass yourpassword来设置密码,客户端连接后用auth password来通过验证

我们使用./redis-server ./redis.conf命令来打开redis服务器。

使用./redis-cli [-p port]来连接服务器(默认6379)。

redis的命令

基本(包括string字符串类型)命令

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是否是集合中的一个元素

sorted_set(有序集合)命令

zadd sorted_set score1 key1 score2 key2 score3 key3...向有序集合中添加key,并定义其score,集合会用score对其排序
zrange sorted_set a b [withscores]从第a到第b显示有序列表中的值 b为-1时显示全部,[显示各个值的score]
zrank/zrevrank sorted_set key 正序/倒序显示key在有序集合中的位置
zrem sorted_set key 删除有序集合中的key
zcard sorted_set [m n]计算有序集合中[score在m到n之间的]一共有多少个

hash(哈希类型)命令

hset hashset key value 设置hash表key的值为value
hget hashset key 获取hash表的key值
hdel hashset key 删除hash表中的一个key
hlen hashset 获取hash表的长度

redis命令繁多,这里只列了一点简单的,具体命令可以其官网或其中文站http://www.redis.cn/查看翻译文档

redis的事务和发布、订阅

redis中的事务与mysql的类似,只有语句有些不同。

DESTOON B2B网站管理系统
DESTOON B2B网站管理系统

DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。

下载

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

对于并发影响,redis有watch语句控制,被watch语句监测的key值一旦在事务提交前发生变化,则事务自动被取消回滚。

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速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

44

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

58

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

11

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

65

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

75

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

21

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号