1. 單程序
- 單程序模型來處理用戶端的請求。對讀寫等事件的響應是通過對epoll函數的包裝來做到的。Redis的實際處理速度完全依靠主程序的執行效率;
- epoll是Linux核心為處理大批量檔案描述符而作了改進的epoll,是Linux下多路複用IO接口select/poll的增強版本,它能顯著提高程式在大量并發連接配接中隻有少量活躍的情況下的系統CPU使用率;
2. redis資料庫的一些概念及操作
- 預設16個資料庫,類似數組下表從零開始,初始預設使用零号庫;
- 統一密碼管理,16個庫都是同樣密碼,要麼都OK要麼一個也連接配接不上,redis預設端口是
;
6379
- select指令切換資料庫:
;
select 0-15
:檢視目前資料庫的key的數量;
dbsize
:清空目前庫;
flushdb
;通殺全部庫;
flushall
Redis資料類型
-
redis的五大資料類型
1. string(字元串)
- string是redis最基本的類型,你可以了解成與Memcached一模一樣的類型,一個key對應一個value;
- string類型是二進制安全的。意思是redis的string可以包含任何資料。如jpg圖檔或者序列化的對象 ;
- string類型是Redis最基本的資料類型,一個redis中字元串value最多可以是512M;
2. list(清單)
redis 清單是簡單的字元串清單,按照插入順序排序。你可以添加一個元素導清單的頭部(左邊)或者尾部(右邊)。它的底層實際是個連結清單。
3. set(集合)
redis的set是string類型的無序集合。它是通過HashTable實作的。
4. hash(哈希,類似java裡的Map)
- redis的hash 是一個鍵值對集合;
- redis hash是一個string類型的field和value的映射表,hash特别适合用于存儲對象;
- 類似Java裡面的Map<String,Object>;
5. zset(sorted set:有序集合)
- redis的zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員;
- 不同的是每個元素都會關聯一個double類型的分數;
- redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複;
常見資料類型操作指令參考網址
(大)http://redisdoc.com/
redis常用指令
:檢視所有key;
keys *
:判斷某個key是否存在;
exists key 的名字
: 目前庫就沒有了,被移除了;
move key dbID(0-15)
: 為給定的key設定過期時間;
expire key 秒鐘
: 檢視還有多少秒過期,-1表示永不過期,-2表示已過期;
ttl key
: 檢視你的key是什麼類型;
type key
redis 字元串(String) --(常用指令介紹)
redis 字元串(String) --(常用指令介紹)
/
set
/
get
/
del
/
append
;
strlen
/
Incr
/
decr
/
incrby
:一定要是數字才能進行加減;(對數字進行加減,直接跟上key就好,預設加1)
decrby
/
getrange
:
setrange
:擷取指定區間範圍内的值,類似between and的關系從零到負一表示全部;
getrange
:設定指定區間範圍内的值,格式是
setrange
;
setrange key 位置值 具體值
/
setex(set with expire) 鍵 秒值 值
setnx(set if not exist) 鍵
- setex:設定帶過期時間的key,動态設定 :
setex 鍵 秒值 真實值
- setnx:隻有在 key 不存在時設定 key 的值:
setnx 鍵 值
mset/mget/msetnx
- mset:同時設定一個或多個 key-value 對。
- mget:擷取所有(一個或多個)給定 key 的值。
- msetnx:同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在(如果存在key,則都不會操作,因為msetnx是原子性型操作)。
:将給定 key 的值設為 value ,并傳回 key 的舊值(old value)。簡單一句話,先get然後立即set。(先擷取原來存在key的值,再将這個新的值設定到這個key中)
getset
redis 清單(List) --(常用指令介紹)
redis 清單(List) --(常用指令介紹)
/
lpush
/
rpush
;
lrange
/
lpop
,移除清單key的頭/尾元素;
rpop
,按照索引下标獲得元素(從上到下)(格式:
lindex
);
lindex key index
:傳回清單 key 的長度(格式:
llen
);
llen key
:根據參數 count 的值,移除清單中與參數 value 相等的元素(格式:
lerm
);
lerm key count value
- count > 0 : 從表頭開始向表尾搜尋,移除與 value 相等的元素,數量為 count 。
- count < 0 : 從表尾開始向表頭搜尋,移除與 value 相等的元素,數量為 count 的絕對值。
- count = 0 : 移除表中所有與 value 相等的值。
,截取指定範圍的值後再指派給key(格式:
ltrim
);
ltrim key start stop
,移除清單的最後一個元素,并将該元素添加到另一個清單頭部并傳回(格式:
rpoplpush
);
rpoplpush source—key destination—key
,将清單 key 下标為 index 的元素的值設定為 value(格式:
lset
);
lset key index value
,(格式:linsert key before|after pivot value)将值 value 插入到清單 key 當中,位于值 pivot 之前或之後;
linsert
- 當 pivot 不存在于清單 key 時,不執行任何操作。
- 當 key 不存在時, key 被視為空清單,不執行任何操作。
- 如果 key 不是清單類型,傳回一個錯誤。
性能總結
它是一個字元串連結清單,left、right都可以插入添加;
- 如果鍵不存在,建立新的連結清單;
- 如果鍵已存在,新增内容;
- 如果值全移除,對應的鍵也就消失了。
- 連結清單的操作無論是頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。
redis 集合(Set) --(常用指令介紹)
redis 集合(Set) --(常用指令介紹)
/
sadd
/
smembers
,格式:
sismember
sadd key member [member ...]
smembers key
sismember key member
:擷取集合裡面的元素個數(格式:
scard
);
scard key
:删除集合中元素(格式:
srem
);
srem key member [member ...]
,(格式:
srandmember
)(不會修改set集合)
srandmember key [count]
- 如果指令執行時,隻提供了 key 參數,那麼傳回集合中的一個随機元素;
- 如果 count 為正數,且小于集合基數,那麼指令傳回一個包含 count 個元素的數組,數組中的元素各不相同。如果 count 大于等于集合基數,那麼傳回整個集合;
- 如果 count 為負數,那麼指令傳回一個數組,數組中的元素可能會重複出現多次,而數組的長度為 count 的絕對值;
,移除并傳回集合中的一個随機元素(格式:
spop
);
spop key
,(格式:
smove
smove source destination member
)将 member 元素從 source 集合移動到 destination 集合;(這個新的集合不存在就會新建立)
數學集合類
- 差集:
(格式:
sdiff
)(這裡的數值隻能一個一個的添加,要不然不會出現效果)
sdiff key [key ...]
- 交集:
(格式:
sinter
)
sinter key [key ...]
- 并集:
(格式:
sunion
)
sunion key [key ...]
redis 哈希(Hash) --(常用指令介紹)
redis 哈希(Hash) --(常用指令介紹)
/
hset
/
hget
/
hmset
/
hmget
/
hgetall
,格式:
hdel
:将哈希表 key 中的域 field 的值設為 value ;
hset key field value
:傳回哈希表 key 中給定域 field 的值;
hget key field
:同時将多個 field-value (域-值)對設定到哈希表 key 中;
hmset key field value [field value ...]
:傳回哈希表 key 中,一個或多個給定域的值;
hmget key field [field ...]
:傳回哈希表 key 中,所有的域和值;
hgetall key
:删除哈希表 key 中的一個或多個指定域,不存在的域将被忽略;
hdel key field [field ...]
,傳回哈希表 key 中域的數量(格式:
hlen
);
hlen key
,檢視哈希表 key 中,給定域 field 是否存在(格式:
hexists
);
hexists key field
/
hkeys
,格式:
hvals
:傳回哈希表 key 中的所有域;
hkeys key
:傳回哈希表 key 中所有域的值;
hvals key
/
hincrby
,格式:
hincrbyfloat
:為哈希表 key 中的域 field 的值加上增量 increment;
hincrby key field increment
:為哈希表 key 中的域 field 加上浮點數增量 increment ;
hincrbyfloat key field increment
,将哈希表 key 中的域 field 的值設定為 value ,當且僅當域 field 不存在(格式:
hsetnx
)
hsetnx key field value
redis 有序集合Zset(sorted set) --(常用指令介紹)
redis 有序集合Zset(sorted set) --(常用指令介紹)
/
zadd
,格式:
zrange
:将一個或多個 member 元素及其 score 值加入到有序集 key 當中;
zadd key score member [[score member] [score member] ...]
:傳回有序集 key 中,指定區間内的成員,其中成員的位置按 score 值遞增(從小到大)來排列;
zrange key start stop [WITHSCORES]
:(格式:
zrangebyscore
),傳回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員;
zrangebuscore key min max [WITHSCORES] [LIMIT offset count]
:移除有序集 key 中的一個或多個成員,不存在的成員将被忽略(格式:
zrem
);
zrem key member [member ...]
/
zcard
/
zcount
/
zrank
,格式:
zscore
:傳回有序集 key 的基數;
zcard key
:傳回有序集 key 中, score 值在 min 和 max 之間(預設包括 score 值等于 min 或 max )的成員的數量;
zcount key min max
:傳回有序集 key 中成員 member 的排名。其中有序內建員按 score 值遞增(從小到大)順序排列,排名以 0 為底,也就是說, score 值最小的成員排名為 0 ;
zrank key member
:傳回有序集 key 中,成員 member 的 score 值;
zscore key member
:傳回有序集 key 中成員 member 的排名。其中有序內建員按 score 值遞減(從大到小)排序,排名以 0 為底,也就是說, score 值最大的成員排名為 0 (格式:
zrevrank
);
zrevrank key member
:傳回有序集 key 中,指定區間内的成員,其中成員的位置按 score 值遞減(從大到小)來排列(格式:
zrevrange
);
zrevrange key start stop [WITHSCORES]
:傳回有序集 key 中, score 值介于 max 和 min 之間(預設包括等于 max 或 min )的所有的成員。有序內建員按 score 值遞減(從大到小)的次序排列(格式:
zrevrangebyscore
);
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
總結:
- redis是一個當程序的非關系型資料庫,但是底層是用的是多路複用的io操作
- redis是有5種資料結構分别為:string、list、hash、set、zset
- 以上是redis5種資料結構常用的指令,多用就會才能記住。