[Redis 作者]
叫Salvatore Sanfilippo,來自意大利的西西里島,現在居住在卡塔尼亞。目前供職於Pivotal公司。他使用的網名是antirez。
[Redis 特點]
Redis從它的許多競爭繼承來的三個主要特點:
1) : Redis數據庫完全在內存中,使用磁盤僅用於持久性。
2) : 相比許多鍵值數據存儲,Redis擁有一套較爲豐富的數據類型。
3) : Redis可以將數據複製到任意數量的從服務器。
[Redis 優勢]
1) : 異常快速:Redis的速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄。
2) : 支持豐富的數據類型:Redis支持最大多數開發人員已經知道像列表,集合,有序集合,散列數據類型。這使得它非常容易解決各種各樣的問題,我們
知道哪些問題是可以處理通過它的數據類型更好。
3) : 操作都是原子性:所有Redis操作是原子的,這保證瞭如果兩個客戶端同時訪問的Redis服務器將獲得更新後的值。
4) : 多功能實用工具:Redis是一個多實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發佈/訂閱),任何短暫的數據,應用程序,
如Web應用程序會話,網頁命中計數等。
[數據類型] redis支持五種類型的數據類型: string hash list set zset
分別介紹redis的五種數據類型:
1) : string(字符串)
string是最簡單的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value,其上支持的操作與Memcached的操作類似。但它的功能
更豐富。
2) : list是一個鏈表結構
主要功能是push、pop、獲取一個範圍的所有值等等。操作中key理解爲鏈表的名字。
主要用在: 微博TimeLime, 消息隊列, 關注列表, 粉絲列表等
3) : 哈希
Redis的哈希是鍵值對的集合。 Redis的哈希值是字符串字段和字符值之間的映射,因此它們被用來表示對象
用在: 用戶瀏覽數
4) : set 集合
Redis的集合是字符串的無序集合。在Redis您可以添加,刪除和測試文件是否存在,在成員O(1)的時間複雜度。
主要用在: 共同好友
5: zset 有序集合
Redis的有序集合類似於Redis的集合,字符串不重複的集合。不同的是,一個有序集合的每個成 員用分數,以便採取有序set命令,從最小的到最大
的成員分數有關。雖然成員具有唯一性,但分數可能會重複。
主要用在: 排行榜(順序性)
[部分整理]
六 命令總結
0) : redis安裝/服務器啓動/客戶端啓動 的命令
- redis 安裝: brew install redis
- redis服務器的啓動 : redis-server
- redis客戶端的啓動 : redis-cli
1) : 鏈接操作相關命令
- qiut => 關閉連接
- auth redis設置的密碼 => 簡單密碼認證
2) : 對value操作的命令
- exists 鍵名 => 判斷鍵名是否存在
- del 鍵名 => 刪除一個指定鍵名的數據
- type 鍵名 => 返回值得類型
- keys * => 返回所有的key
- dbsize => 返回當前數據庫中所有key的數目
- expire key 存活時間 => 設置key的存活時間
- ttl key => 獲取key的存活時間
- select [0-15] => 選擇數據庫 默認0數據庫
- info => 獲取服務器的信息和統計
3) : 設置redis安全密碼
- 去配置文件中 vim /usr/local/etc/redis.conf 中添加 requirepass redis密碼
4): 對String操作的命令
- set (key value) => 給數據庫中名稱爲key的string賦予值value
- get( key) => 返回數據庫中名稱爲key的string的value
- mget(key1, key2,…, key N) => 返回庫中多個string(它們的名稱爲key1,key2…)的value
- setnx(key, value) => 如果不存在名稱爲key的string,則向庫中添加string,名稱爲key,值爲value
- setex(key, time, value) => 向庫中添加string(名稱爲key,值爲value)同時,設定過期時間time
- mset(key1, value1, key2, value2,…key N, value N) => 同時給多個string賦值,名稱爲key i的string賦值value i
- msetnx(key1, value1, key2, value2,…key N, value N) => 如果所有名稱爲key i的string都不存在,則向庫中添加string,名稱key i賦值爲value i
- incr(key) => 名稱爲key的string增1操作
- incrby(key, integer) => 名稱爲key的string增加integer
- decr(key) =>名稱爲key的string減1操作
- decrby(key, integer) => 名稱爲key的string減少integer
- append(key, value) => 名稱爲key的string的值附加value
- substr(key, start, end) => 返回名稱爲key的string的value的子串
5) : 對List操作的命令
- rpush( key value )=> 在名稱爲key的list尾部添加一個值爲value
- lpush (key value) => 在名稱爲key的list頭部添加一個值爲value
- llen( key) => 返回名稱爲key的長度
- lrange (key start end) => 返回名稱爲key的list中start至end之間的元素(end 爲-1 表示返回key對應的所有數據)
- ltrim(key, start, end) => 截取名稱爲key的list,保留start至end之間的元素
- lindex(key, index) => 返回名稱爲key的list中index位置的元素
- lset(key, index, value) => 給名稱爲key的list中index位置的元素賦值爲value
- lrem(key, count, value)=>刪除count個名稱爲key的list中值爲value的元素。count爲0,刪除所有值爲value的元素,count>0從 頭至尾刪除count個值爲
value的元素,count<0從尾到頭刪除|count|個值爲value的元素。
- lpop(key):返回並刪除名稱爲key的list中的首元素
- rpop(key) => 返回並刪除名稱爲key的list中的尾元素
- blpop(key1, key2,… key N, timeout):lpop命令的block版本。即當timeout爲0 時,若遇到名稱爲key i的list不存在或該list爲空,則命令結束。如果
timeout>0,則 遇到上述情況時,等待timeout秒,如果問題沒有解決,則對keyi+1開始的list執行pop操作
- brpop(key1, key2,… key N, timeout):rpop的block版本。參考上一命令。
- rpoplpush(srckey, dstkey):返回並刪除名稱爲srckey的list的尾元素,並將該元素添加到名稱爲dstkey的list的頭部
6) : 對Set操作的命令
- sadd (key member ) => 向名稱爲key的set中添加元素member
- smembers (key) => 返回名稱爲key的集合
- srem (key member ) => 刪除名稱爲key的set中的元素member
- scard( key) => 返回名稱爲key的set的集合個數
- sinter( key1 key2) => 求名稱爲key1和名稱key2的交集
- sinterstore( dstkey key1 key2) => 求交集並將交集保存到集合dstkey中
- sismember(key, member) => 測試member是否是名稱爲key的set的元素
- sunion(key1, key2,…key N) => 求並集
- sunionstore(dstkey, key1, key2,…key N) => 求並集並將並集保存到dstkey的集合
- sdiff(key1, key2,…key N) :求差集
- sdiffstore(dstkey, key1, key2,…key N) => 求差集並將差集保存到dstkey的集合
7) : 對zSet操作的命令
- zadd (key score member) => 向名稱爲key的zset中添加元素member,score用於排序。如果該元素已經存在,則根據score更新該元素的順序
- zrange (key start end) => 返回名稱爲key的zset(元素已按score從小到大排序)中的 index從start到end的所有元素
- zrevrange( key, start, end) => 返回名稱爲key的zset(元素已按score從大到小排序)中的 index從start到end的所有元素
- (zrem key, member) => 刪除名稱爲key的zset中的元素member
- zincrby (key, increment, member) => 如果在名稱爲key的zset中已經存在元素member,則該元素的score增加increment;否則向集合中添加該元素,
其score的值爲increment
- zrank( key, member )=> 返回名稱爲key的zset(元素已按score從小到大排序)中member元素的rank(即index,從0開始),若沒有member元素,
返回“nil”
- zrevrank (key, member 0 => 返回名稱爲key的zset(元素已按score從大到小排序)中member元素的rank(即index,從0開始),若沒有member元
素,返回“nil”
8) : 對Hash操作的命令
- hmset( key, field,value) => 向名稱爲key的hash中添加元素field<—>value [user:1鍵名]
例如: hmset user:1 username daxia gender 1 age 23
- hget (key, field) => 返回名稱爲key的hash中field對應的value
例如: hget user:1 username
- hmget( key, field1, …,field N) => 返回名稱爲key的hash中field i對應的value
例如: hmget user:1 username gender
- hgetall (key )=> 返回名稱爲key的hash中所有的鍵(field)及其對應的value
- hvals( key ) => 返回名稱爲key的hash中所有鍵對應的value
- hkeys (key ) => 返回名稱爲key的hash中所有鍵
- hlen (key) => 返回名稱爲key的hash中元素個數
- hmset( key, field1, value1,…,field N, value N) => 向名稱爲key的hash中添加元素field i<—>value i
- hincrby (key, field, integer) => 將名稱爲key的hash中field的value增加integer
- hexists (key, field )=> 名稱爲key的hash中是否存在鍵爲field的域
- hdel (key, field )=> 刪除名稱爲key的hash中鍵爲field的域
9) : 持久化
- save:將數據同步保存到磁盤
- bgsave:將數據異步保存到磁盤
- lastsave:返回上次成功將數據保存到磁盤的Unix時戳
- shundown:將數據同步保存到磁盤,然後關閉服務
10) : 遠程服務控制
- info:提供服務器的信息和統計
- monitor:實時轉儲收到的請求
- slaveof:改變複製策略設置
- config:在運行時配置Redis服務器