1.基於記憶體的key-value數據庫
2.基於c語言編寫的,可以支援多種語言的api //set每秒11萬次,取get 81000次
3.支援數據持久化
4.value可以是string,hash, list, set, sorted set
使用場景
- 去最新n個數據的操作
- 排行榜,取top n個數據 //最佳人氣前10條
- 精確的設定過期時間
- 計數器
- 實時系統, 反垃圾系統
- pub, sub發佈訂閱構建實時訊息系統
- 構建訊息佇列
- 快取
- cmd存取redis
- redis-cli.exe -h 127.0.0.1 -p 6379
key
- keys * 獲取所有的key
- select 0 選擇第一個庫
- move myString 1 將當前的數據庫key移動到某個數據庫,目標庫有,則不能移動
- flush db 清除指定庫
- randomkey 隨機key
- type key 型別
-
- set key1 value1 設定key
- get key1 獲取key
- mset key1 value1 key2 value2 key3 value3
- mget key1 key2 key3
- del key1 刪除key
- exists key 判斷是否存在key
- expire key 10 10過期
- pexpire key 1000 毫秒
- persist key 刪除過期時間
string
- set name cxx
- get name
- getrange name 0 -1 字串分段
- getset name new_cxx 設定值,返回舊值
- mset key1 key2 批次設定
- mget key1 key2 批次獲取
- setnx key value 不存在就插入(not exists)
- setex key time value 過期時間(expire)
- setrange key index value 從index開始替換value
- incr age 遞增
- incrby age 10 遞增
- decr age 遞減
- decrby age 10 遞減
- incrbyfloat 增減浮點數
- append 追加
- strlen 長度
- getbit/setbit/bitcount/bitop 位元運算
hash
-
hset myhash name cxx
- hget myhash name
- hmset myhash name cxx age 25 note "i am notes"
- hmget myhash name age note
- hgetall myhash 獲取所有的
- hexists myhash name 是否存在
- hsetnx myhash score 100 設定不存在的
- hincrby myhash id 1 遞增
- hdel myhash name 刪除
- hkeys myhash 只取key
- hvals myhash 只取value
- hlen myhash 長度
list
- lpush mylist a b c 左插入
- rpush mylist x y z 右插入
- lrange mylist 0 -1 數據集合
- lpop mylist 彈出元素
- rpop mylist 彈出元素
- llen mylist 長度
- lrem mylist count value 刪除
- lindex mylist 2 指定索引的值
- lset mylist 2 n 索引設值
- ltrim mylist 0 4 刪除key
- linsert mylist before a 插入
- linsert mylist after a 插入
- rpoplpush list list2 轉移列表的數據
set
- sadd myset redis
- smembers myset 數據集合
- srem myset set1 刪除
- sismember myset set1 判斷元素是否在集閤中
- scard key_name 個數
- sdiff | sinter | sunion 操作:集合間運算:差集 | 交集 | 並集
- srandmember 隨機獲取集閤中的元素
- spop 從集閤中彈出一個元素
zset
- zadd zset 1 one
- zadd zset 2 two
- zadd zset 3 three
- zincrby zset 1 one 增長分數
- zscore zset two 獲取分數
- zrange zset 0 -1 withscores 範圍值
- zrangebyscore zset 10 25 withscores 指定範圍的值
- zrangebyscore zset 10 25 withscores limit 1 2 分頁
- Zrevrangebyscore zset 10 25 withscores 指定範圍的值
- zcard zset 元素數量
- Zcount zset 獲得指定分數範圍內的元素個數
- Zrem zset one two 刪除一個或多個元素
- Zremrangebyrank zset 0 1 按照排名範圍刪除元素
- Zremrangebyscore zset 0 1 按照分數範圍刪除元素
- Zrank zset 0 -1 分數最小的元素排名爲0
- Zrevrank zset 0 -1 分數最大的元素排名爲0
- Zinterstore
- zunionstore rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 weights 1 1 1 1 1 1 1
排序:
- sort mylist 排序
- sort mylist alpha desc limit 0 2 字母排序
- sort list by it:* desc by命令
- sort list by it:* desc get it:* get參數
- sort list by it:* desc get it:* store sorc:result sort命令之store參數:表示把sort查詢的結果集儲存起來
訂閱與發佈:
- 訂閱頻道:subscribe chat1
- 發佈訊息:publish chat1 "hell0 ni hao"
- 檢視頻道:pubsub channels
- 檢視某個頻道的訂閱者數量: pubsub numsub chat1
- 退訂指定頻道: unsubscrible chat1 , punsubscribe java.*
- 訂閱一組頻道: psubscribe java.*
redis事物:
隔離性,原子性,
步驟: 開始事務,執行命令,提交事務
multi //開啓事務
sadd myset a b c
sadd myset e f g
lpush mylist aa bb cc
lpush mylist dd ff gg
伺服器管理
dump.rdb
appendonly.aof
//BgRewriteAof 非同步執行一個aop(appendOnly file)檔案重寫
會建立當前一個AOF檔案體積的優化版本
//BgSave 後臺非同步儲存數據到磁碟,會在當前目錄下建立檔案dump.rdb
//save同步儲存數據到磁碟,會阻塞主進程,別的用戶端無法連線
//client kill 關閉用戶端連線
//client list 列出所有的用戶端
//給用戶端設定一個名稱
client setname myclient1
client getname
config get port
//configRewrite 對redis的組態檔進行改寫rdb save 900 1save 300 10save 60 10000aop備份處理appendonly yes 開啓持久化appendfsync everysec 每秒備份一次命令:bgsave非同步儲存數據到磁碟(快照儲存)lastsave返回上次成功儲存到磁碟的unix的時間戳shutdown同步儲存到伺服器並關閉redis伺服器bgrewriteaof檔案壓縮處理(命令)