Redis是一個開源的內存數據庫,Redis提供了多種不一樣類型的數據結構,不少業務場景下的問題均可以很天然地映射到這些數據結構上。除此以外,經過複製、持久化和客戶端分片等特性,咱們能夠很方便地將Redis擴展成一個可以包含數百GB數據、每秒處理上百萬次請求的系統。html
Redis支持諸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets ) / ( zset)、位圖(bitmaps)、hyperloglogs、帶半徑查詢和流的地理空間索引等數據結構(geospatial indexes)。git
127.0.0.1:6379> set name lczmx
OK
127.0.0.1:6379> get name
"lczmx"
使用set
、get
命令進行設置值和取值
string 類型的值最大能存儲 512MBgithub
命令 | 說明 |
---|---|
set key value | 設置指定 key 的值 |
get key | 獲取指定 key 的值。 |
getrange key start end | 返回 key 中字符串值的子字符 |
getset key value | 將給定 key 的值設爲 value ,並返回 key 的舊值(old value)。 |
getbit key offset | 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。 |
mget key1 [key2..] | 獲取全部(一個或多個)給定 key 的值。 |
setbit key offset value | 對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。 |
setex key seconds value | 將值 value 關聯到 key ,並將 key 的過時時間設爲 seconds (以秒爲單位)。 |
setnx key value | 只有在 key 不存在時設置 key 的值。 |
setrange key offset value | 用 value 參數覆寫給定 key 所儲存的字符串值,從偏移量 offset 開始。 |
strlen key | 返回 key 所儲存的字符串值的長度。 |
mset key value [key value ...] | 同時設置一個或多個 key-value 對。 |
msetnx key value [key value ...] | 同時設置一個或多個 key-value 對,當且僅當全部給定 key 都不存在。 |
psetex key milliseconds value | 這個命令和 setex 命令類似,但它以毫秒爲單位設置 key 的生存時間,而不是像 setex 命令那樣,以秒爲單位。 |
incr key | 將 key 中儲存的數字值增一。 |
incrby key increment | 將 key 所儲存的值加上給定的增量值(increment) 。 |
incrbyfloat key increment | 將 key 所儲存的值加上給定的浮點增量值(increment) 。 |
decr key | 將 key 中儲存的數字值減一。 |
decrby key decrement | key 所儲存的值減去給定的減量值(decrement) 。 |
append key value | 若是 key 已經存在而且是一個字符串, append 命令將指定的 value 追加到該 key 原來值(value)的末尾。 |
Redis hash 是一個string 類型的field 和value 的映射表。添加,刪除操做都是O(1)(平均)。redis的hash是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。web
127.0.0.1:6379> hmset user age 18 addr "beijing"
OK
127.0.0.1:6379> hget user age
"18"
127.0.0.1:6379> hget user addr
"beijing"
上面使用hmset
建立了一個key:user,它包含兩個field(age、addr)分別值(value)爲1八、beijing
再用hget
獲取一個字段的值redis
命令 | 說明 |
---|---|
hdel key field1 [field2] | 刪除一個或多個哈希表字段 |
hexists key field | 查看哈希表 key 中,指定的字段是否存在。 |
hget key field | 獲取存儲在哈希表中指定字段的值。 |
hgetall key | 獲取在哈希表中指定 key 的全部字段和值 |
hincrby key field increment | 爲哈希表 key 中的指定字段的整數值加上增量 increment 。 |
hincrbyfloat key field increment | 爲哈希表 key 中的指定字段的浮點數值加上增量 increment 。 |
hkeys key | 獲取全部哈希表中的字段 |
hlen key | 獲取哈希表中字段的數量 |
hmget key field1 [field2] | 獲取全部給定字段的值 |
hmset key field1 value1 [field2 value2 ] | 同時將多個 field-value (域-值)對設置到哈希表 key 中。 |
hset key field value | 將哈希表 key 中的字段 field 的值設爲 value 。 |
hsetnx key field value | 只有在字段 field 不存在時,設置哈希表字段的值。 |
hvals key | 獲取哈希表中全部值。 |
hscan key cursor [match pattern] [count count] | 迭代哈希表中的鍵值對。 |
hash-max-zipmap-entries 64 #配置字段最多64 個
hash-max-zipmap-value 512 #配置value 最大爲512 字節數據庫
Redis 列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊)。windows
127.0.0.1:6379> lpush city beijing shanghai guangzhou
(integer) 3
127.0.0.1:6379> lrange city 0 10
1) "guangzhou"
2) "shanghai"
3) "beijing
以上命令,使用lpush
能夠爲city這個鍵添加一個或多個值(加到左邊),在使用lrange city 0 10
把左面的11個值[0:10]
取出,緩存
列表最多可存儲 232 - 1 元素 (4294967295, 每一個列表可存儲40多億)。安全
命令 | 說明 |
---|---|
blpop key1 [key2 ] timeout | 移出並獲取列表的第一個元素, 若是列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止 |
brpop key1 [key2 ] timeout | 移出並獲取列表的最後一個元素, 若是列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止 |
brpoplpush source destination timeout | 從列表中彈出一個值,將彈出的元素插入到另一個列表中並返回它; 若是列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止 |
lindex key index | 經過索引獲取列表中的元素 |
linsert key before | after pivot value |
llen key | 獲取列表長度 |
lpop key | 移出並獲取列表的第一個元素 |
lpush key value1 [value2] | 將一個或多個值插入到列表頭部 |
lpushx key value | 將一個值插入到已存在的列表頭部 |
lrange key start stop | 獲取列表指定範圍內的元素 |
lrem key count value | 移除列表元素 |
lset key index value | 經過索引設置列表元素的值 |
ltrim key start stop | 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間以內的元素都將被刪除 |
rpop key | 移除列表的最後一個元素,返回值爲移除的元素 |
rpoplpush source destination | 移除列表的最後一個元素,並將該元素添加到另外一個列表並返回 |
rpush key value1 [value2] | 在列表中添加一個或多個值 |
rpushx key value | 爲已存在的列表添加值 |
set是string 類型的無序集合
集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是 O(1)。bash
127.0.0.1:6379> sadd name tom kk
(integer) 2
127.0.0.1:6379> sadd name tom
(integer) 0
127.0.0.1:6379> smembers name
1) "kk"
2) "tom"
使用sadd
添加一個或多個值, 再使用smembers
拿到全部的元素
注意:Set中的元素惟一,因此不能插入一個已經存在的元素
命令 | 說明 |
---|---|
sadd key member1 [member2] | 向集合添加一個或多個成員 |
scard key | 獲取集合的成員數 |
sdiff key1 [key2] | 返回給定全部集合的差集 |
sdiffstore destination key1 [key2] | 返回給定全部集合的差集並存儲在 destination 中 |
sinter key1 [key2] | 返回給定全部集合的交集 |
sinterstore destination key1 [key2] | 返回給定全部集合的交集並存儲在 destination 中 |
sismember key member | 判斷 member 元素是不是集合 key 的成員 |
smembers key | 返回集合中的全部成員 |
smove source destination member | 將 member 元素從 source 集合移動到 destination 集合 |
spop key | 移除並返回集合中的一個隨機元素 |
srandmember key [count] | 返回集合中一個或多個隨機數 |
srem key member1 [member2] | 移除集合中一個或多個成員 |
sunion key1 [key2] | 返回全部給定集合的並集 |
sunionstore destination key1 [key2] | 全部給定集合的並集存儲在 destination 集合中 |
sscan key cursor [match pattern] [count count] | 迭代集合中的元素 |
將Set中的元素增長一個權重參數score,元素按score有序排列。
127.0.0.1:6379> zadd top 1 lihua 2 zhangsan 3 lisi
(integer) 3
127.0.0.1:6379> zrange top 0 3
1) "lihua"
2) "zhangsan"
3) "lisi"
命令 | 說明 |
---|---|
zadd key score1 member1 [score2 member2] | 向有序集合添加一個或多個成員,或者更新已存在成員的分數 |
zcard key | 獲取有序集合的成員數 |
zcount key min max | 計算在有序集合中指定區間分數的成員數 |
zincrby key increment member | 有序集合中對指定成員的分數加上增量 increment |
zinterstore destination numkeys key [key ...] | 計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中 |
zlexcount key min max | 在有序集合中計算指定字典區間內成員數量 |
zrange key start stop [withscores] | 經過索引區間返回有序集合指定區間內的成員 |
zrangebylex key min max [limit offset count] | 經過字典區間返回有序集合的成員 |
zrangebyscore key min max [withscores] [limit] | 經過分數返回有序集合指定區間內的成員 |
zrank key member | 返回有序集合中指定成員的索引 |
zrem key member [member ...] | 移除有序集合中的一個或多個成員 |
zremrangebylex key min max | 移除有序集合中給定的字典區間的全部成員 |
zremrangebyrank key start stop | 移除有序集合中給定的排名區間的全部成員 |
zremrangebyscore key min max | 移除有序集合中給定的分數區間的全部成員 |
zrevrange key start stop [withscores] | 返回有序集中指定區間內的成員,經過索引,分數從高到低 |
zrevrangebyscore key max min [withscores] | 返回有序集中指定分數區間內的成員,分數從高到低排序 |
zrevrank key member | 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序 |
命令 | 說明 |
---|---|
del key | key 存在時刪除 key |
dump key | 序列化給定 key ,並返回被序列化的值 |
select index | 選擇數據庫 |
auth password | 驗證密碼 |
exists key | 檢查給定 key 是否存在 |
expire key seconds | 爲給定 key 設置過時時間,以秒計 |
expireat key timestamp | expireat 的做用和 expire 相似,都用於爲 key 設置過時時間。 不一樣在於 expireat 命令接受的時間參數是 unix 時間戳(unix timestamp) |
pexpire key milliseconds | 設置 key 的過時時間以毫秒計 |
pexpireat key milliseconds-timestamp | 設置 key 過時時間的時間戳(unix timestamp) 以毫秒計 |
keys pattern | 查找全部符合給定模式( pattern)的 key |
move key db | 將當前數據庫的 key 移動到給定的數據庫 db 當中 |
persist key | 移除 key 的過時時間,key 將持久保持 |
pttl key | 以毫秒爲單位返回 key 的剩餘的過時時間 |
ttl key | 以秒爲單位,返回給定 key 的剩餘生存時間(ttl, time to live) |
randomkey | 從當前數據庫中隨機返回一個 key |
rename key newkey | 修改 key 的名稱 |
renamenx key newkey | 僅當 newkey 不存在時,將 key 更名爲 newkey |
scan cursor [match pattern] [count count] | 迭代數據庫中的數據庫鍵 |
type key | 返回 key 所儲存的值的類型 |
reids的配置文件在redis的安裝目錄下的redis.conf文件(windows平臺是redis.windows.conf)
在命令行中獲取配置文件:
CONFIG GET CONFIG_SETTING_NAME
在命令行中修改配置文件:
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
全部使用CONFIG SET
設置的配置參數將會當即被Redis加載,並從下一個執行的命令開始生效。
名稱 | 說明 |
---|---|
daemonize | 默認no, 使用 yes 啓用守護進程(Windows 不支持守護線程的配置 ) |
pidfile | 當 Redis 以守護進程方式運行時,Redis 默認會把 pid 寫入 /var/run/redis.pid 文件 |
port | 指定 Redis 監聽端口,默認端口爲 6379 |
bind | 綁定的主機地址,默認127.0.0.1 |
timeout | 當客戶端閒置多長秒後關閉鏈接,默認爲 0 ,表示關閉該功能 |
loglevel | 日誌記錄級別,默認爲 notice。Redis 總共支持四個級別:debug、verbose、notice、warning |
logfile | 日誌記錄方式,默認爲stdout(標準輸出)。若是配置 Redis 爲守護進程方式運行,而這裏又配置爲日誌記錄方式爲標準輸出,則日誌將會發送給 /dev/null |
databases | 設置數據庫的數量,默認16個(0-15),默認數據庫爲0,使用SELECT 命令切換 |
save <seconds> <changes> | 多少秒內,有多少次更新操做,就將數據同步到數據文件,能夠多個條件配合 ,如config set save "900 1 300 10 60 10000" :900秒內1次或300秒內10次或60秒內10000更改,就同步到數據文件 |
rdbcompression | 存儲至本地數據庫時是否壓縮數據,默認爲 yes,Redis 採用 LZF 壓縮,若是爲了節省 CPU 時間,能夠關閉該選項,但會致使數據庫文件變的巨大 |
dbfilename | 指定本地數據庫文件名,默認值爲 dump.rdb |
dir | 指定本地數據庫存放目錄,默認/var/lib/redis |
slaveof <masterip> <masterport> | 設置當本機爲 slave 服務時,設置 master 服務的 IP 地址及端口,在 Redis 啓動時,它會自動從 master 進行數據同步 |
masterauth <master-password> | 當 master 服務設置了密碼保護時,slav 服務鏈接 master 的密碼 |
requirepass | 設置 Redis 鏈接密碼,默認爲""(沒有)。若是配置了鏈接密碼, AUTH 命令提供密碼進行驗證 |
maxclients | 設置同一時間最大客戶端鏈接數,默認爲0(無限制)。當客戶端鏈接數到達限制時,Redis 會關閉新的鏈接並向客戶端返回 max number of clients reached 錯誤信息 |
maxmemory | 指定 Redis 最大內存限制 |
appendonly | 是否在每次更新操做後進行日誌記錄,默認爲 no |
appendfilename | 更新日誌文件名,默認爲 appendonly.aof |
appendfsync | 指定更新日誌條件,默認everysec,共有 3 個可選值:no:表示等操做系統進行數據緩存同步到磁盤(快) always:表示每次更新操做後手動調用 fsync() 將數據寫到磁盤(慢,安全) everysec:表示每秒同步一次(折中) |
vm-enabled | 指定是否啓用虛擬內存機制,默認值爲 no |
vm-swap-file | 虛擬內存文件路徑,不可多個 Redis 實例共享 |
vm-max-memory | 將全部大於 vm-max-memory 的數據存入虛擬內存,默認值爲 0 |
vm-page-size | 多大的數據分一個page |
vm-pages | swap 文件中的 page 數量,磁盤上每 8 個 pages 將消耗 1byte 的內存 |
vm-max-threads | 訪問swap文件的線程數,默認值爲4 |
glueoutputbuf | 在向客戶端應答時,是否把較小的包合併爲一個包發送,默認爲yes(開啓) |
activerehashing | 是否激活重置哈希,默認爲yes(開啓) |
include | 指定包含其它的配置文件,能夠在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有本身的特定配置文件 |