一上來就主從、集群、哨兵,這誰受得了
概念篇
一提到Redis,大家聽到最多的應該就是“主從”、“集群”、“哨兵”了吧。對于不太精通的同學來說,乍一聽這些概念,有的人會心向往之,有的人會望而卻步。今天我們先來說一下Redis的基本配置。
什么是 Redis?
Redis是REmote DIctionary Server的簡稱,意為“遠程字典服務器”。它是基于BSD協議的完全開源的高性能的key-value數據庫。
它是一個單線程卻性能極好的內存數據庫,所有的操作都是按照順序線性執行的,避免了不必要的上下文切換和競爭條件。
采用非阻塞I/O的形式進行通信,利用Epoll的多路復用特性,提高了I/O效率。
給大家提供兩個官方網址:
中文網站:http://www.redis.cn/
英文網站:http://www.redis.io/
默認16個庫:0-15,默認使用0庫;統一密碼,默認端口6379(九宮格的merz)
Redis的特點
內存存儲和持久化:支持異步將內存中的數據寫到硬盤上,同時不影響“取最新N個數據”的服務操作,重啟的時候可以再次加載進內存
發布、訂閱消息系統
定時器、計數器:可設定過期時間
數據結構多樣:支持String、list,set,zset,hash等多種數據結構的存儲
數據備份:即master-slave模式的數據備份
高性能:讀的速度是110000次/s,寫的速度是81000次/s
原子性:所有操作都是原子性的:單個操作是原子性的;多個操作也支持事務,通過MULTI和EXEC指令包起來
之前我們已經介紹過Redis的安裝,此處不再贅述。
命令篇
key命令
select db:db為數字,表示切換數據庫為db庫
Dbsize:查看當前數據庫的key的數量
Flushdb:清空當前庫的所有key
Flushall:清空所有庫的key(幾乎不用)
keys * :所有key羅列
exists key:判斷key是否存在
move key db:將key移動到db庫(當前庫的key沒有了),如果當前庫不存在key,則失敗;如果當前庫與db庫都存在key值,則不移動
expire key seconds:為key設置過期時間
ttl key:查看還有多少秒過期,-1表示永不過期,-2表示已過期
type key:查看你的key是什么類型
del key:刪除key
執行命令:1生效,0不生效
String(字符串)
一個key對應一個value,一個鍵最大能存儲512MB,是二進制安全的。
SET key value:設置key的值
GET key:獲取key的值
del key:刪除key
append key value:如果key已經存在并且是一個字符串,APPEND命令將指定的value追加到該key原來值(value)的末尾
strlen key:返回key所儲存的字符串值的長度
getrange key start end:返回key中字符串值的子字符;(0,-1)返回全部
setrange key offset value:用value參數覆寫給定key所儲存的字符串值,從偏移量offset開始
setex key seconds value:(set with expire)給key設置value,并在seconds秒后過期
setnx key value:(set if not exist)先判斷key的value是否存在,不存在再插入,防止覆蓋
mset key value [key value ...]:同時設置一個或多個key-value對
mget key1 [key2...]:同時獲取一個或者多個key的value值
msetnx key value [key value ...]:同時設置一個或多個key-value對,當且僅當所有給定key都不存在(有存在,有不存在的都不存)
getset key value:將給定key的值設為value,并返回key的舊值(old value)。
一定要是數字才能進行加減
incr key:將key中存儲的數字加一
decr key:將key中儲存的數字值減一
incrby key increment:將key所儲存的值加上給定的增量值(increment)
decrby key decrement:將key所儲存的值減去給定的減量值(decrement)
Hash(哈希)
鍵值對集合,適合存儲對象,類似于java中的map;每個hash可以存儲2^32?-1 鍵值對(40多億)
hset key field value:將哈希表key中的字段field的值設為value
hget key field:獲取存儲在哈希表中指定字段的值
hmset key field1 value1 [field2 value2]:同時將多個field-value(域-值)對設置到哈希表key中
hmget key field1 [field2]:獲取所有給定字段的值
hgetall key:獲取在哈希表中指定key的所有字段和值
hdel key field1 [field2]:刪除一個或者多個哈希表字段
hlen key:獲取哈希表中字段的數量
hexists key field:查看哈希表key中,指定的字段是否存在
hkeys key:獲取哈希表中所有field的值
hvals key:獲取哈希表中所有value的值
hincrby key field increment:哈希表key中指定字段的整數值加上增量increment
hincrbyfloat key field increment:哈希表key中指定字段的浮點數值加上增量increment
hsetnx key field value:只有在字段field不存在時,設置哈希表字段的值
List(列表)
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
lpush從左邊(首)插入,rpush從右邊(尾)插入
lpop從左邊移除元素并返回該元素,rpop從右邊移除元素并返回該元素
列表最多可存儲2^32?- 1元素(每個列表可存儲40多億)。
lpush key value[value...]:將一個或多個值插入到列表頭部
rpush key value[value...]:將一個或多個值插入到列表尾部
lrange key start stop:獲取隊列指定范圍內的元素
lpop key:移出并獲取列表的第一個元素
rpop key:移除列表的最后一個元素,返回值為移除的元素
lindex key index:按照索引下標獲得元素,也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素,以此類推。
llen key:獲取列表長度
lrem key count value:刪除count個value
ltrim key start stop:對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除(閉區間)
rpoplpush source destination:移除列表的最后一個元素,并將該元素添加到了另一個列表并返回(尾出頭入)
lset key index value:將key的index位置設置為value
linsert key before/after 【point】 value:在列表的元素前或者后插入元素
如果鍵不存在,則創建新的鏈表;
如果鍵已存在,新增內容;
如果值全部移除,對應的鍵也就消失了;
鏈表的操作頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。
Set(集合)
Redis的Set是String類型的無序集合,集合成員是唯一的。集合是通過哈希表(HashTable)實現的,所以添加、刪除、查找的復雜度都是 O(1)。集合中最大的成員數為2^32?- 1( 每個集合可存儲40多億個成員)。
sadd key member[member...]:集合中添加一個或者多個成員(無序)
smembers key:返回集合中的所有成員
sismember key member:判斷member元素是否是集合key的成員
scard key:獲取集合的成員數
srem key member[member...]:刪除集合中的一個或者多個元素
srandmember key [count]:返回集合中一個或多個隨機數---------適合做挖財項目
spop key:移除并返回集合中的一個隨機元素
smove source destination member:將member元素從source集合移動到destination
sdiff key1 [key2]:返回第一個集合與其他集合之間的差異
sinter key1 [key2]:返回給定所有集合的交集
sunion key1 [key2]:返回所有給定集合的并集
zset(sorted set有序集合)
Redis的zset和set一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯一個double類型的分數。
redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重復。添加元素到集合,元素在集合中存在則更新對應score。
zadd key score1 member1 [score2 member2]:向有序集合添加一個或者多個成員,或者更新已存在成員的分數
ZRANGE key start stop [WITHSCORES]:通過索引區間返回有序集合指定區間內的成員(是否包含分數信息)
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]:通過分數返回范圍內的member成員(是否包含分數),其中“(”表示不包含;limit作用是返回限制 (limit start count)
示例:
zrangebyscore zset01 60 (90 withscores limit 2 2:從zset01中選取分數大于等于60,小于90的從第二個索引開始往后兩個的成員
zrem key member[member...]:移除有序集合中的一個或多個成員
zcard key:獲取有序集合的成員數
zcount key min max:獲取有序集合的大于min小于max的成員數
zrank key member:獲取member的索引
zscore key member:獲取有序集合的member的分數
ZREVRANK key member:返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序
ZREVRANGE key start stop [WITHSCORES]:通過索引返回有序集中指定區間內的成員,分數從高到低
ZREVRANGEBYSCORE key max min [WITHSCORES]:返回有序集中指定分數區間內的成員,分數從高到低排序
以上就是今天的全部內容了,如果你有不同的意見或者更好的idea,歡迎聯系阿Q,添加阿Q可以加入技術交流群參與討論呦!
Redis 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。