聲明:部分內容借鑑與網絡,實際操作內容都經過本人實測
NoSQL概述:
NoSQL四大分類:
四者對比:
在分佈式數據庫中CAP原理CAP+BASE:
傳統的ACID:
A(Atomicity) 原子性
C(Consistency) 一致性
I(Isonlation) 獨立性
D(Durability) 持久性
CAP+BASE
C(Consisitency) 強一致性
A(Availability) 可用性
P(Partition tolerance) 分區容錯性
Redis簡介:
Redis是一個高性能的key-value數據庫。redis的出現,很大程度補償了memcached這類key-value存儲的不足,在部分場合可以對關係數據庫起到很好的補充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客戶端。
安裝:
yum -y install redis
或者
docker pull redis
常用命令
五大數據類型:
String 字符串
Hash 哈希 類似java中的map
List 列表
Set 集合
Zset(sorded set) 有序集合
庫級別操作
DBSize |
查看當前數據庫key的數量 |
FlushDB (ASYNC) |
清除當前庫 帶ASYNC 將會單開線程在後臺執行(4.0新特性) |
FlushALL (ASYNC) |
清所有庫 帶ASYNC將會單開線程在後臺執行(4.0新特性) |
Keys * |
匹配key 如keys key1 |
Exists key |
判斷某個key是否存在 存在返回1 不存在返回0 |
Move key db |
當前庫就沒有了,被移除了 |
Expire key 秒鐘 |
爲給定的key設置過期時間 |
Ttl key |
查看還有多少秒過期,-1表示永不過期,-2表示已過期 |
Type key |
查看你的key是什麼類型 |
SWAPDB 0 1 |
交換數據庫,原來的數據庫 0 變成數據庫 1 , 而原來的數據庫 1 則變成數據庫 0(4.0新特性) |
MEMORY useage key |
查看key所佔用的內存情況 |
MEMORY MALLOC-STATS |
子命令可以展示分配器內部狀態 |
MEMORY PURGE |
子命令可以要求分配器釋放更多內存 |
-------
String字符串
Get、Set |
設置 取得值 |
Select db |
切換數據庫 |
Del key UNLINK key |
刪除key 這個命令是 DEL 命令的異步版本, 它可以將刪除指定鍵的操作放在後臺線程裏面執行, 從而儘可能地避免服務器阻塞(4.0新特性) |
Append key str |
追加內容 |
Strlen key |
Key的內容長度 |
Incr key |
對值進行自增 每次自增1 一定是數據才能加減 |
IncrBy key 大小 |
每次遞增多少 |
Decr |
對值進行自減 每次自減1 一定是數據才能加減 |
DecrBy |
每次遞減多少 |
Getrange key start end |
獲取字符串從x下標 到y下標 |
Setrange key start content |
從start開始設置值 直接覆蓋 |
Setex key 秒數 value1 |
給key賦值新值並設置秒數 會覆蓋以前的內容 |
Setnx key value1 |
如果key存在,設置無效 如果不存在 將會新增key |
Mset k v k v k v |
同時設置一個或多個 key-value 對 |
Mget k k k k k k |
獲取所有(一個或多個)給定 key 的值 |
Getset |
給key設置一個新的值 然後返回一箇舊值(這個不錯) |
Msetsnx k v k v |
同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在 |
------------------------------------------------------------------------------------------------------------
List列表
LPUSH key v v v v |
各個 value 值按從左到右的順序依次插入到表頭 |
RPUSH key v v v v |
那麼各個 value 值按從左到右的順序依次插入到表尾 |
LRANGE key 0 -1 |
取得指定範圍內的值 0 -1取全部,0 1 表示取索引0和1的值 |
LPOP key |
彈出當前棧頂第一個值 即移除 |
RPOP key |
彈出當前棧最後一個值 即移除 |
LINDEX key index |
取索引處的值 |
LLEN key |
取list長度 |
LREM key 數量 value |
刪除一個list內的幾個value |
LTRIM key s e |
截取元素 並重新賦值 |
RPOPLPUSH key1 key2 |
把key1棧尾的值 壓到key2棧頂 |
Lset key index value1 value2 |
給指定索引處賦值 |
LINSERT key before value value2 |
插入值 在key的value之前 |
LINSERT key after value value2 |
插入值 在key的value之後 |
它是一個字符串鏈表,left、right都可以插入添加;
如果鍵不存在,創建新的鏈表;
如果鍵已存在,新增內容;
如果值全移除,對應的鍵也就消失了。
鏈表的操作無論是頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。
------------------------------------------------------------------------------------------------------------
Set集合
Sadd key v v v |
新增set並賦值 |
Smembers key |
查詢key的值 |
Sismember key value |
查詢value是否在key中 |
Scard |
獲取集合裏面的元素個數 |
Srem key value |
把value從key中刪除 |
Srandmember key 數量 |
從key裏面隨機取出幾個數 |
Spop key |
隨機彈出棧 一次一個 |
Smove key1 key2 value |
把key1中的一個值移動到key2的棧頂 |
Sdiff key1 key2 key3 … |
差集,在第一個set裏面而不在後面任何一個set裏面的項,相當於拿第一個做參考 |
Sinter |
交集 |
Sunion |
並集 |
Hash:哈希 KV模式不變,但V是一個鍵值對
Hset key k v |
設置一個帶map的key |
Hget key k |
取出key中的k的值 |
Hmset key k v k v k v |
批量設置 |
Hmget key k k k k k |
批量取多個k的值 |
HgetAll key |
取一個key的所有值 |
Hdel key k |
刪除key中的k |
Hlen key |
取長度 |
Hexists key k |
key中 的k是否存在 |
Hkeys key |
取key中的所有k |
Hvals key |
取key所有的k的value |
HincrBy key k |
給key中的k自增1 |
HincrByfloat key k val |
可以key中的k的v增加val 對於float類型 |
Hsetnx key k v |
給key中的key設置值 如果存在 設置無效 不存在 新增至並設置值 |
Zset 有序集合
在set基礎上,加一個score值。 之前set是k1 v1 v2 v3,現在zset是k1 score1 v1 score2 v2。下面所說的分數就是score
Zadd key s v |
給v再加上一個s值 |
Zrange key 0 -1 |
查詢範圍內key對應的v |
Zrange key 0 -1 withscores |
聯合score一起查 |
ZRANGEBYSCORE zset1 s1 s2 |
查詢在set1中分數在s1到s2之間的v(如果在分數前加上“(”表示不包含) |
ZRANGEBYSCORE zset1 s1 s2 limit 2 1 |
limit 2 1 從下標2開始截取1個 |
ZREM key v |
從key中刪除v |
Zcard key |
統計key的v的個數 |
ZCOUNT key s1 s2 |
查詢key中分數在s1到s2之間的 |
Zrank key v |
取v的下標 |
Zscore key v |
取v的分數 |
Zrevrank key v |
倒序取v的下標 |
Zrevrange key 0 -1 |
倒序取全部的v |
ZREVRANGEBYSCORE zset1 90 60 |
查詢key中分數在90到60之間的,因爲這裏是倒序的 |
Redis的配置文件詳解 請看下篇文章...