Redis
切換到redis的目錄
啟動:./redis-server
關閉:killall redis-server
Redis的數據類型:
String字符 ?list鏈表 ?set集合(無序) ?Sort Set排序(有序)?hash數據類型
string類型的數據操作
redis的string可以包含任何數據。包括jpg圖片或者序列化的對象。
單個value值最大上限是1G字節。
set key value 設置key對應的只為string類型的value
set key ?value ?EX ?過期秒數
set key ?value ?PX ?過期毫秒數
get key 獲取key的值
mset key1 value1 ... keyN valueN 一次設置多個key的值
mget key1 key2 ... keyN 一次獲取多個key的值
Key的操作
給被存儲信息取的的一個“名字”
>exists key 測試指定key是否存在
>del key1 key2 ... keyn 刪除指定key
>type key 返回key的類型
>keys pattern 返回指定模式匹配的所有key
??keys col* 獲得所有名字為col開始的key的信息
??keys ?* ?????????????????????獲得當前redis數據庫全部的key
>rename oldkey ?newkey 修改名字
>dbsize 返回當前數據庫key的數量
>expire key seconds ? 為key指定過期時間
>ttl key 返回key的剩余生命時間
>select dbindex 選擇數據庫
redis與mysql數據庫相似的地方是有多個數據庫供操作
>move key dbindex 將key從當前數據庫移動到指定數據庫
>flushdb 刪除當前數據庫中所有key
>flushall 刪除所有數據中的所有key
數據類型list鏈表
鏈表使用特點:
- 數據進入鏈表后有嚴格的先后順序關系
- 允許相同的元素內容重復進入鏈表
- 鏈表可以在頭部進入數據、尾部出數據,也可以在頭部進、頭部出[與棧數據結構一致]
- 鏈表中存儲的單元數據都是”String字符串”類型
?
lpush key ?string ? 在key對應的鏈表的頭部添加字符串元素
? lpush(left push)從鏈表左側添加單元數據
? 可以多次調用,代表給鏈表添加多個數據
rpop key 從list的尾部刪除元素,并返回刪除的元素
? rpop(right pop)從鏈表的右側刪除數據
llen key 返回key對應list鏈表的長度
? llen(list length)
key不存在返回0
如果key對應類型不是list返回錯誤
lrange key start end 返回指定區間內的元素,下標從0開始
? lrange(left range)從鏈表的左側獲得范圍內的元素出來,范圍下標從0開始
rpush key string 同上,在尾部添加元素
? rpush(right push)從鏈表右側添加單元數據
lpop key 從list的頭部刪除元素,并返回刪除元素
? lpop(left pop)從鏈表的左側刪除數據
ltrim key start end ????截取list,保留指定區間內元素
? ltrim(left trim),從左側做截取保留
Set 集合類型
特點:
- 內部數據沒有先后順序(不同于list鏈表)
- 內部各個元素彼此都是唯一的,不能重復(不同于list鏈表)
- 集合中的各個元素類型都是String類型
- 除了基本的添加,刪除的數據操作,還包括,取交、并、差集合的數據操作
sadd key member [member...] 添加一個string元素到key對應的set集合中
成功返回1
如果元素存在,返回0,操作無效
可以調用多次,給一個集合添加多個元素
srem key member [remove]從key對應的set中移除給定元素
smove p1 p2 member 從p1集合中移除member成員后添加給p2集合
scard key 返回集合的元素個數
sismember key member ? 判斷member是否在集合中
sinter key1 key2 ... keyN 返回所有給定key的交集
sunion key1 key2 ... keyN 返回所有給定key的并集
sdiff key1 key2 ... keyN 返回所有給定key的差集
? 內部有key1的元素,不會有key2到keyN的任何元素
smembers key 返回key對應集合的全部元素
? 與list中的lrange方法相似
Sort set排序集合
和set一樣sorted set也是string類型元素的集合,
該Sort ?Set類型 可以想象成是 set和list結合的排序集合類型
?
sort set集合內部的每個元素都會關聯一個權。該權是衡量元素順序的標準(生活中權可以是身高、分數、商品熱賣數量)
通過權可以有序的排列獲取集合中的元素
?
sort set中每個元素分為兩部分:值、權
zadd key score(權)??member(值) ?scoreN memberN ..
添加元素到集合
元素在集合中存在則更新對應的score權
該方法操作元素,存在就更新,不存在就添加
一次性可以設置1個或多個元素
zrem key member (remove)刪除指定元素,1表示成功,0表示不存 在該元素
zrange key start end 返回集合中指定區間的元素,
(范圍是權值由小到大排序的序號,序號是從0開 始)
?
zrevrange key start end (reverse反轉)
返回集合中指定區間的元素,
(范圍是權值由大到小排序的序號,序號是從0開 始)
zcard key ?? 返回集合中元素個數
zremrangebyrank key start stop 刪除集合中排名在給定區間的元素
(范圍是權值由小到大排序的序號,序號是從0開 始)
Hash數據類型
hash類型存儲信息的樣子與數據表的單條記錄非常相似
設置一個key后,可以為該key設置多個field域名?和 field域名的值
?
hset:HSET key field value ?每次設置一個域
hmset:HMSET key field value [field value ...] ?允許一次性設置多個域
hget:HGET key field 獲得一個key的一個域的信息
hmget:HMGET key field [field ...] ?獲得一個key的多個域的信息
Hash快照持久化:
文檔中所寫內容案例:
save 900 1 #900 秒(15分鐘)內如果超過 1 個 key 被修改,則發起快照保存
save 300 10 ???? #300秒(5分鐘)超過10個key被修改,發起快照
save 60 10000??? #60秒(1分鐘)超過10000個key被修改,發起快照
linux終端手動發起快照持久化
?./redis-cli ?[-h 主機名ip ?-p 端口號碼] ?bgsave
?./redis-cli ?-h ?ip地址 ?-p 端口 ?bgsave
Redis設置密碼:
①./redis-cli ?-a ?密碼 ?????//設置連接密碼
②登錄到redis操作終端通過auth命令設置連接密碼
> auth ?密碼
?
Redis總結:
- Redis各種數據類型
String字符類型
Set ?get ?mset ?mget
(1)?List鏈表[應用在最新商品展示]:
lpush ?lrange ??rpop ??llen ??ltrim ??rpush ?lpop
(2)?Set集合[應用在促銷商品]:
sadd ?srem ?smove ?scard ??sismember ?sinter ?sunion ?sdiff ?smembers
(3)?SortSet排序集合[應用在熱賣商品]:
zadd ?zrem ?zrange ?zrevrange ?zcard ?zremrangebyrank
(4)?Hash: ?
hset ?hget ?hmset ?hmget
- 持久化
(1)?rdb 快照 ?dump.rdb ???頻率:15分鐘 ?5分鐘 ?1分鐘 ???bgsave
(2)?aof ?追加 ???bgrewriteaof
遠程操作:./redis-cli ?-h ?ip地址 ?-p 端口 ?-a ?密碼 ??bgsave/bgrewriteaof
?
PHP操作redis
① 實例化對象
$redis = new Redis();
② 連接redis服務
//臨時連接,長時間不操作,則會自動斷開
//該連接適合”瀏覽器的http”的一次性請求
$redis -> connect('192.168.18.121',6379);
//長連接,客戶端不手動發起關閉,則不會自己關閉
//服務器后臺使用,該程序24小時不中斷執行,就適合使用該長連接
$redis -> pconnect('192.168.18.121',6379);
③設置連接密碼
$redis -> auth(密碼);
④選擇數據庫[默認操作0標號數據庫]
$redis -> select(0-15);
string操作
$redis->set(key, value);
$redis->get(key);
$redis->mset([key=>value,key=>value,key=>value...]);
$redis->mget([key1,key2,key3]);
?
?
list相關操作
lPush
$redis->lPush(key, value);
rPush
$redis->rPush(key, value);
lPop/rPop
$redis->lPop('key');
lRange
$redis->lRange('key1', 0, -1);
lTrim
$redis->lTrim('key', start, end);
?
?
SET操作相關
sAdd
$redis->sAdd(key , value);
sRem
$redis->sRem('key1', 'set2');
sMove
$redis->sMove(seckey, dstkey, value);
sIsMember
$redis->sIsMember(key, value);
$redis->sCard('key')
sInter
$redis->sInter(array('key1', 'key2')) or $redis->sInter('key1', 'key2')
sUnion
$redis->sUnion('s0', 's1', 's2');
?
zset(sorted set)操作相關
$redis->zAdd('key', 5, 'val5');
$redis->zRange('key', 0, -1);
$redis->zRange('key1', 0, -1); // with scores $redis->zRange('key1', 0, -1, true);
zRem(key, member) :刪除名稱為key的zset中的元素member
$redis->zAdd('key', 10, 'val10');
$redis->zDelete('key', 'val2');
$redis->zRange('key', 0, -1);
$redis->zAdd('key', 10, 'val10');
$redis->zRevRange('key', 0, -1); // with scores $redis->zRevRange('key', 0, -1, true);
zRemRangeByScore, zDeleteRangeByScore
$redis->zRemRangeByScore('key', start, end);
?