redis 的基本數型別和使用
Redis 簡介
Redis 是完全開源的,遵守 BSD 協議,是一個高效能的 key-value 資料庫。
Redis 與其他 key - value 快取產品有以下三個特點:
- Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。
- Redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。
- Redis支援資料的備份,即master-slave模式的資料備份。
Redis 優勢
- 效能極高– Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的資料型別 – Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性– Redis還支援 publish/subscribe, 通知, key 過期等等特性。
Redis與其他key-value儲存有什麼不同?
-
Redis有著更為複雜的資料結構並且提供對他們的原子性操作,這是一個不同於其他資料庫的進化路徑。Redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象。
-
Redis執行在記憶體中但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料量不能大於硬體記憶體。在記憶體資料庫方面的另一個優點是,相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。
Redis的五種基本資料型別
1.string字串
2.hash 雜湊
3.list 列表
4.set 集合
5.sorted set 有序集合
String 字串
字串是Redis中最基礎的資料型別,首先key是字串型別,其它的資料型別都是在字串的基礎之上構建的。
在操作過程中常見的命令有:
set:設定字串
set key value
mset:同時設定多個字串
msetkey1 value1 key2 value2...keyNvalueN
get:獲取字串
get key
mget:同時獲取多個字串
mget key1 key2...keyN
del key :刪除key (可以同時刪除多個)
dek key1 key2 ...keyN
append key value :如果key存在,則在指定的key末尾新增,如果key不存在則類似set
strlen key 返回此key的長度
以下幾個命令只有在key值為數字的時候才能正常操作
incr key 為執定key的值加一
decr key 為指定key的值減一
incrby key 數值 為指定key的值增加數值
decrby key 數值 為指定key的值減數值
getrange key 0(開始位置) -1(結束位置) 獲取指定區間範圍內的值,類似between......and的關係 (0 -1)表示全部
setrange key 1(開始位置,從哪裡開始設定) 具體值 設定(替換)指定區間範圍內的值
setex <key> <seconds> <value>,設定鍵值對的同時,設定過期時間 ,當過了有效時間再次查詢返回nil
TTL 檢視鍵值對的有效時間,如果為永久存在的鍵值對返回-2,如果是設定了有效時間,有效時間內返回剩餘的秒數,過期返回-1
****************************************************
一般指令
KEYS *,查詢當前資料庫中的所有鍵 (keys可以使用正則寫法來檢視符合條件的鍵 keys key[ ])
EXISTS <key>,判斷當前資料庫中的鍵是否存在
當設定了有效時間的鍵值對,在有效時間內查詢返回結果為1存在,過了有效時間返回為0,不存在
TYPE <key>,檢視當前鍵的型別
DEL <key>,刪除某個鍵
EXPIRE <key> <seconds>,為鍵設定過期時間
DBSIZE,檢視當前資料庫中key的數量
FLUSHDB,清空當前庫
FLUSHALL,清空所有庫
SELECT <dbid>,預設0-15號庫,通常只使用0號庫
Hash 雜湊
Redis hash 是一個鍵值對集合。 Redis hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。kv模式不變,但v是一個鍵值對類似Java裡面的Map
hset key (key value) 向hash表中新增一個元素
hget key key 向hash表中獲取一個元素
hmset key key1 value1 key2 value2 key3 value3 向集合中新增一個或多個元素
hmget key key1 key2 key3 向集合中獲取一個或多個元素
hgetall key 獲取在hash列表中指定key的所有欄位和值
hdel key key1 key2 刪除一個或多個hash欄位
hlen key 獲取hash表中欄位數量
hexists key key 檢視hash表中,指定key(欄位)是否存在
hkeys key 獲取指定hash表中所有key(欄位)
hvals key 獲取指定hash表中所有value(值)
hsetnx key key1 value1 與hset作用一樣,區別是不存在賦值,存在了無效。
LIST 列表
它是一個字串連結串列,left、right都可以插入新增; 如果鍵不存在,建立新的連結串列; 如果鍵已存在,新增內容;如果值全移除,對應的鍵也就消失了。 連結串列的操作無論是頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。
Redis 列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)。 它的底層實際是個連結串列
lpush key value1 value2 將一個或多個值加入到列表頭部,最先的值在類表後面,最後的值在前
rpush key value1 value2 將一個或多個值加入到列表底部
lrange key start end 獲取列表指定範圍的元素 (0 -1)表示全部 ,下標從0開始,負數表示從後往前
lpop key 移出並獲取列表第一個元素
rpop key 移出並獲取列表最後一個元素
lindex key index 通過索引獲取列表中的元素 預設從0開始
llen key 獲取列表長度
lrem key (數量) 值,表示刪除全部給定的值。這個就是全部值 從left往right刪除指定數量個值等於指定值的元素,返回的值為實際刪除的數量
起始位置小於0 表示從後往前,等於0表示全部刪除,大於0表示從前往後
lset key 下標 新值 下標從0 開始 修改原來的值變為新值
linsert key before or after 現有元素 新元素 ,新增新元素
set 無序集合
Redis的Set是string型別的無序,不能重複的集合。可以自動排重,可以判斷某個值是否存在,底層是String的無序集合
sadd key value1 value 2 向集合中新增一個或多個成員
smembers key 返回集合中所有成員
sismembers key member 判斷member元素是否是集合key的成員 ,有返回1,否則0
scard key 獲取集合裡面的元素個數
srem key value 刪除集合中指定元素
srandmember key 數值 從set集合裡面隨機取出指定數值個元素 如果超過最大數量就全部取出
spop key 隨機移除並返回集合中某個元素
smove key1 key2 value(key1中某個值) 作用是將key1中執定的值移除 加入到key2集合中 ,key2是否存在都可以進行新增
sdiff key1 key2 在第一個集合裡面而不在後面任何一個集合裡面的項(差集)
sinter key1 key2 在第一個set和第二個set中都有的 (交集)
sunion key1 key2 兩個集合所有元素(並集)
zset 有序集合
Redis zset 和 set 一樣也是string型別元素的集合,且不允許重複的成員。 不同的是每個元素都會關聯一個double型別的分數。 redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複
zadd key score 值 score 值 向集合中新增一個或多個成員
zrange key 0 -1 表示所有 返回指定集合中所有value
zrange key 0 -1 withscores 返回指定集合中所有value和score
zrangebyscore key 開始score 結束score 返回指定score間的值
zrem key score某個對應值(value),可以是多個值 刪除元素
zcard key 獲取集合中元素個數
zcount key 開始score 結束score 獲取分數區間內元素個數
zrank key vlaue 獲取value在zset中的下標位置(根據score排序)
zscore key value 按照值獲得對應的分數
zremrangebyscore key開始score 結束score 刪除指定score間的值