首頁  >  文章  >  後端開發  >  PHP資料庫redis用法及分析

PHP資料庫redis用法及分析

墨辰丷
墨辰丷原創
2018-05-18 14:21:571201瀏覽

這篇文章主要介紹了PHP資料庫操作redis用法,結合實例形式詳細分析了php安裝、使用redis的步驟、方法與相關注意事項,需要的朋友可以參考下

#具體如下:

memcache雖然好用,解決了資料庫遇到高並發時的IO問題,但還有很多問題丞待解決:

1、資料持久性問題,memcache用記憶體進行存儲,一旦memcache伺服器宕機,那麼儲存的資料全部遺失。

2、memcache儲存的資料類型單一,只支援key-value型的數據,要儲存複雜類型的數據,必然需要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的指令



# #

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的類似,只有語句有些不同。 #########
        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資料庫redis用法及分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn