set是集合,它是string類型的無序集合。set是經過hash table實現的、添加、刪除和查找的複雜度都是0(1)。對集合咱們能夠取並集、交集、差集。經過這些操做咱們能夠實現sns中的好友推薦和blog的tag功能。 php
(1)sadd mysql
向名稱爲key 的set中添加元素。 linux
語法:sadd 集合名 元素 redis
(2)smembers 獲取集合中內容,語法:smembers 集合名稱 sql
(3)srem 數據庫
刪除名稱爲key的set中的元素. apache
(4)spop 緩存
隨機返回並刪除名稱爲key的 set中一個元素。 安全
(5)sdiff 服務器
返回全部給定key與第一個key的差集。
(6)sdiffstore
返回全部給定key與第一個key的差集,並將結果存爲另外一個key。
語法:sdiffstore 新的集合 集合1 集合2
(7)sinter
返回全部給定key的交集.
(8)sinterstore
返回全部給定key的交集,並將結果存爲另外一個key
(9)sunion
返回全部給定key的並集
(10)sunionstore
返回全部給定key的並集。
(11)smove
從第一個key對應的set中移除member並添加到第二個對應的set中。
(12)scard
返回名稱爲key的set的元素個數。
(11)sismember
測試member是不是名稱爲 key的set的元素
(12)srandmember
隨機返回名稱爲key的set的一個元素,但不刪除元素
sorted set是set的一個升級版本,他在set的基礎上增長了一個順序屬性,這一屬性在添加修改元素的時候能夠指定,每次指定後,zset會自動從新按新的值調整順序。能夠理解爲有兩列的mysql表,一列存value,一列存順序。操做中的key理解爲zset的名字。
(1)zadd
向名稱爲key的zset中添加元素。若是該元素存在,則更新其順序。
語法:zadd 集合名 序號 內容
(2)zrange
獲取有序集合中的內容
(3)zrem
刪除名稱爲key的zset中的元素member。
(4)zincrby
若是在名稱爲key的zset中已經存在元素member,則該元素的score增長increment不然向該集合中添加該元素,其score的值爲increment。
(5)zrank
返回名稱爲key的zset中member元素的排名(按score從小到大排序)即下標。
(6)zrevrank
返回名稱爲key的zset中member元素的排名(按score從大到小排序)即下標。
(7)zrevrange
返回名稱爲key的zset(按score從大到小順序)中的index從start到end的全部元素。
(8)zrangebyscore
返回集合中score在給定區間的元素
(9)zcount
返回集合中score在給定區間的數量。
(10)zcard
返回集合中元素的個數
(11)zremrangebyrank
刪除集合中排名在給定區間的元素。
(12)zremrangebyscore
刪除集合中score在給定區間的元素。
redis提供了豐富的命令對數據庫和各類數據庫類型進行操做,這些命令能夠在linux終端使用。
一、鍵值相關的命令
(1)keys
返回知足給定參數的全部key
用表達式*,表明取出全部的key
(2)exists
確認一個key是否存在。
(3)expire
設置一個key的過時時間
(4)move:
將當前數據庫中的key轉移到其它數據庫中。
(5)persist
移除給定key的過時時間
(6)randomkey
隨機返回key空間的一個key
(7)rename
重命名key
(8)type:返回值的類型
二、服務器相關命令
(1)select
選擇數據庫。redis數據庫編號從0-15,咱們能夠選擇任意一個數據庫來進行數據的存取。
當選擇16時,報錯,說明沒有編號爲16的這個數據庫。
(2)quit
退出鏈接
(3)dbsize
返回當前數據庫中key的數目
(4)info
獲取服務器的信息和統計。
(5)config get
獲取參數的配置。
本例中咱們獲取了dir這個參數配置的值,若是想獲取所有參數的配置只須要執行」config get *」便可將所有的值都顯示出來
(6)flushdb
刪除當前選擇數據庫中的全部key
(7)flushall
刪除全部數據庫中的全部的 key
設置客戶端鏈接後進行任何其餘操做前須要使用的密碼。
注意:由於 redis速度至關快,因此在一臺比較好的服務器下,一個外部的用戶能夠在一秒鐘進行150k次的密碼嘗試,這意味着你須要指定很是很是強大的密碼來防止暴力破解。
方法:打開配置文件redis.conf,
語法:
requirepass 設置的密碼
requirepass guangzhou
密碼驗證方式有兩種:
第一種:在客戶端登陸後,在執行某些操做時,執行auth 輸入設置密碼
第二種:在客戶端登陸時,執行驗證,
redis-cli -a 輸入設置的密碼
redis是一個支持持久化的內存數據庫,也就是說redis須要常常將內存中的數據同步到硬盤來保證持久化。
redis支持兩種持久化方式:
rdb的工做原理:
每隔N分鐘或N次寫操做後,
從內存dump數據造成rdb文件,
壓縮
放在備份目錄
save 900 1 #刷新快照到硬盤中,必須知足二者要求才會觸發,即900秒以後至少1個關鍵字發生變化。
save 300 10 #必須是300秒以後至少10個鍵的值發生變化。
save 60 10000 #必須是60秒以後至少10000個鍵的值發生變化。
(以上3個選項都屏蔽,則rdb禁用)
stop-writes-on-bgsave-error yes #後臺存儲錯誤中止寫。
rdbcompression yes #使用LZF壓縮rdb文件。
rdbchecksum yes #存儲和加載rdb文件時校驗。
dbfilename dump.rdb #設置rdb文件名。
dir ./ #設置工做目錄,rdb文件會寫入該目錄。
aof方式
固然因爲os會在內核中緩存write作的修改,因此可能不是當即寫到磁盤上。這樣aof方式的持久化也仍是有可能會丟失部分修改。
能夠經過配置文件告訴reids咱們想要經過fsync函數強制os寫入到磁盤的時機。
appendonly yes //啓用 aof 持久化方式
appendfilename appendonly.aof //保存命令的文件名稱
# appendfsync always //每次收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用
appendfsync everysec //每秒鐘強制寫入磁盤一次,在性能和持久化方面作了很好的折中,推薦
# appendfsync no //徹底依賴 os,性能最好,持久化沒保證
no-appendfsync-on-rewrite no #重寫aof時同步最新數據
aof重寫:內存中的數據,逆化成命令,寫入到.aof日誌裏面。以解決aof日誌過大過程當中。
auto-AOF-rewrite-percentage 100 當前aof文件是上次重寫是增長N%時重寫
auto-AOF-rewrite-min-size 64mb aof重寫至少要達到的大小
64M =è50M 100M =è80M(重寫後)
第一次從新完成: 第二次重到100M 第三次重寫160M
手動完成重寫:bgrewriteaof
注意點:
兩種備份方式能夠同時使用,並且推薦這麼作。
恢復時,rdb和aof哪一個恢復的塊。
rdb快,由於rdb數據是內存的映射,直接載入到內存,而aof是命令,須要逐條執行。
一、準備擴展文件。擴展文件要和php的版本一致,具體是vc幾的,是不是ts的或nts的。
二、把擴展拷貝到php的安裝目錄下面的ext目錄下面。
三、打開php.ini文件,配置加載擴展,(重啓apache)
四、經過phpinfo函數進行測試。
入門案例使用:
用戶註冊 用戶登陸 用戶的刪除和修改 分頁顯示用戶 添加用戶的好友
register.php用戶註冊頁面,
思考:如何來存儲用戶的具體信息,使用哈希,構造一個用戶鍵
user:id
index.php 首頁面,用於顯示用戶列表頁面。
del.php 用於刪除用戶,要注意刪除 哈希鍵 ,還要刪除鏈表裏面用戶的id
login.php:用戶登陸的頁面,
loginok.php處理用戶登陸的頁面:
接收到$username 和 $password 如何驗證用戶合法呢?
用戶的數據是存儲到哈希裏面,哈希的鍵user:id
思路:根據用戶輸入的用戶名,獲取到用戶的id,根據id從哈希裏面獲取用戶的密碼,該密碼再和用戶輸入的密碼進行比較。
在用戶註冊時,經過設置一個字符串,該字符串用於存儲用戶的id.
字符串的鍵:如何設計:’username:’.$username,$userid
addfield.php 添加好友頁面,