php redis list 去重,php數組去重、魔術方法、redis常用數據結構及應用場景

一、用函數對數組進行去重的方法

1、

arrau_unique函數的作用

移除數組中重復的值。

將值作為字符串進行排序,然后保留

每個值第一次

出現的健名,健名保留不變。

第二個參數可以選擇排序方式:

SORT_REGULAR - 按照通常方法比較(不修改類型)

SORT_NUMERIC - 按照數字形式比較

SORT_STRING - 按照字符串形式比較

SORT_LOCALE_STRING - 根據當前的本地化設置,按照字符串比較。

2、同樣的

array_flip也可以間接實現去重,為什么是間接呢?

因為array_flip的作用是交換數組中的健和值,如果出現多個值,反轉后會將最后一個值作為健保留。

所以,實現數組去重,可以

使用兩次array_flip,結果會保留

每個值最后一次出現的健名,健名不變。

eg:

$arr =array("a"=>"a1","b"=>'b1',"c"=>"a2","d"=>"a1");

$arr1 = array_flip($arr);

print_r($arr1);//先反轉一次,去掉重復值,輸出Array ( [a1] => d[b1] => b [a2] => c )

$arr2 = array_flip($arr1);

print_r($arr2);//再反轉回來,得到去重后的數組,輸出Array([d] => a1 [b] => b1 [c] => a2)

$arr3 = array_unique($arr);

print_r($arr3);//利用php的array_unique函數去重,輸出Array ( [a]=> a1 [b] => b1 [c] =>a2 )

?>

可以看出,array_flip和array_unique不同的是,前者保留同一個值最后一次出現的健名,而后者保留的是第一次出現的健名。

二、php下的魔術方法總結

魔術方法是php面向對象中特有的特性。他們在特定的情況下被觸發,都是以雙下滑錢開頭,可以把他們理解為鈎子,利用魔術方法可以輕松實現動態創建類屬性和方法(php面向對象中重載)。

1、__contruct,__destruct

__constuct構建對象的時被調用;

__destruct明確銷毀對象或腳本結束時被調用;

2、__get,__set

__get讀取不可訪問或不存在屬性時被調用

__set當給不可訪問或不存在屬性賦值時被調用

3、__isset,__unset

__isset對不可訪問或不存在的屬性調用isset()或empty()時被調用

__unset對不可訪問或不存在的屬性進行unset時被調用

4、__call,__callStatic

__call調用不可訪問或不存在的方法時被調用

__callStatic調用不可訪問或不存在的靜態方法時被調用

5、__sleep,__wakeup

__sleep當使用serialize時被調用,當你不需要保存大對象的所有數據時很有用

__wakeup當使用unserialize時被調用,可用於做些對象的初始化操作

6、__clone

進行對象clone時被調用,用來調整對象的克隆行為

7、__toString

當一個類被轉換成字符串時被調用

[ 題外題

php將類轉換為json字符串,還不是轉換成數組。

$json_string = json_encode($object, JSON_FORCE_OBJECT);

區別:

json_encode($object); //結果:"[{"aa":"bb","cc":"dd"}]"

json_encode($object,JSON_FORCE_OBJECT); //結果:"{"aa":"bb","cc":"dd"}"

]

8、__invoke

當以函數方式調用對象時被調用

9、__set_state

當調用var_export()導出類時,此靜態方法被調用。用__set_state的返回值做為var_export的返回值。

10、__debuginfo

當調用var_dump()打印對象時被調用(當你不想打印所有屬性)適用於PHP5.6版本

$m = new Magic(); //__construct()被調用

$m->not_exist_property = test; //__set()被調用

echo $m->not_exist_property;//__get()被調用

$m->abc(1,2,3); //__call()被調用

echo isset($m->not_exist_property); //__isset()被調用,返回bool值

unset($m->not_exist_property); //__unset()被調用

echo $tmp = serialize($m); //__sleep()被調用

unserialize($tmp); //__wakeup()被調用

$m1 = clone $m; //__clone()被調用,對象默認是引用傳遞,使用clone關鍵詞則可實現對象復制

$m(); //__invoke()

eval( '$m2 = ' . var_export ( $m , true ) . ';' );var_dump($m2);

var_dump($m);

最后__destruct()被調用

三、Redis常見數據結構使用場景

1、string

常用命令: set,get,decr,incr,mget 等。

String數據結構是簡單的key-value類型,value其實不僅可以是String,也可以是數字。

常規key-value緩存應用;

常規計數:微博數,粉絲數等。

2、Hash

常用命令: hget,hset,hgetall 等。

Hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。 比如我們可以Hash數據結構來存儲用戶信息,商品信息等等。

舉個例子: 最近做的一個電商網站項目的首頁就使用了redis的hash數據結構進行緩存,因為一個網站的首頁訪問量是最大的,所以通常網站的首頁可以通過redis緩存來提高性能和

並發量。我用jedis客戶端來連接和操作我搭建的redis集群或者單機redis,利用jedis可以很容易的對redis進行相關操作,總的來說從搭一個簡單的集群到實現redis作為緩

存的整個步驟不難。

3、list

常用命令: lpush,rpush,lpop,rpop,lrange等

list就是鏈表,Redis list的應用場景非常多,也是Redis最重要的數據結構之一,比如微博的關注列表,粉絲列表,最新消息排行等功能都可以用Redis的list結構來實現。

Redis list的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷。

4、set

常用命令:sadd,spop,smembers,sunion 等

set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動排重的。

當你需要存儲一個列表數據,又不希望出現重復數據時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。

在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis可以非常方便的實現如共同關注、共同喜好、二度好友等功能。

5、Sorted Set(zset)

常用命令: zadd,zrange,zrem,zcard等

和set相比,sorted set增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列。

舉例: 在直播系統中,實時排行信息包含直播間在線用戶列表,各種禮物排行榜,彈幕消息(可以理解為按消息維度的消息排行榜)等信息,適合使用Redis中的SortedSet結構進行

存儲。

四、restful架構

RESTful是一種基於資源的軟件架構風格。RESTful API是基於HTTP協議的一種實現。

請求方法:

》GET : 請求獲取Request-URI所標識的資源

》POST : 在Request-URI所標識的資源后附加新的數據

》HEAD : 請求獲取由Request-URI所標識的資源的響應消息報頭

》PUT : 更新資源時常用,用於請求服務器存儲一個資源,並用Request-URI作為其標識

》DELETE : 請求服務器刪除Request-URI所標識的資源

》OPTIONS : 請求查詢服務器的性能,或者查詢與資源相關的選項和需求

常用狀態碼

200 OK //客戶端請求成功

400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解

401 Unauthorized //服務器收到請求,但是拒絕提供服務

404 Not Found //請求資源不存在

500 Internal Server Error //服務器發生不可預期的錯誤

503 Server Unavailable //服務器當前不能處理客戶端的請求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值