? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ONSQL
NOSQL指的是非關(guān)系型數(shù)據(jù)庫(kù),是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱,
特點(diǎn):
1,不支持sql語(yǔ)法,NOSQL中沒(méi)有一種通用的語(yǔ)法每種數(shù)據(jù)庫(kù)都有自己的語(yǔ)法,
2,因NOSQL數(shù)據(jù)庫(kù)存在于內(nèi)存當(dāng)中,所以它的讀寫(xiě)性能很高,
3,NOSQL的存儲(chǔ)方式十分靈活,存儲(chǔ)方式可以是JSON文檔,鍵值對(duì)等其它方式,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Redis
特點(diǎn):
1,redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤當(dāng)中,重啟的時(shí)候可以再次加載使用、
2,redis不僅支持簡(jiǎn)單的key—value類型數(shù)據(jù),而且還把value分為list,set,zset,hash等~數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)
3,redis交換數(shù)據(jù)快,所以在服務(wù)器中常用來(lái)存儲(chǔ)一些需要頻繁調(diào)取的數(shù)據(jù),以提高效率,
一,redis基本使用
1,啟動(dòng):redis-server
2,關(guān)閉:redis-cli SHUTDOWN或者ctrl+d,,
3,多數(shù)據(jù)庫(kù):redis默認(rèn)支持16個(gè)數(shù)據(jù)庫(kù),從0開(kāi)始的遞增數(shù)字命名,如:SELECT1,SELECT來(lái)選擇使用哪個(gè)數(shù)據(jù)庫(kù)。
4,命令行客服端:
方法一:將命令作為redis-cli的參數(shù)執(zhí)行1,¥redis-cli -h 127.0.0.1 -p 6379
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2,¥redis-cli PING
方法二:進(jìn)入交互模式¥redis-cli
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PING
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 輸出:ECHO hello
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?基礎(chǔ)命令
1,設(shè)置鍵和值
通過(guò)SET key values來(lái)設(shè)置的一個(gè)新的鍵值對(duì)? ?MSET設(shè)置多個(gè)
如:SET bar 1
同時(shí)設(shè)置多個(gè):MSET bar1 a bar2 b
2,獲得符合規(guī)則的鍵名列表
通過(guò) KEYS? ?patten 來(lái)獲取key所對(duì)應(yīng)的 value
(1),KEYS *
(2),這里的patten支持glod風(fēng)格的統(tǒng)配符格式
(3),GET bar #存在返回對(duì)應(yīng)的value值,沒(méi)有返回uil,表示空的意思,
(4),MGET bar1 bar2 #同時(shí)獲得多個(gè)
3,判斷一個(gè)鍵是否存在
EXISTS key 如果鍵存在則返回整數(shù)類型1,否則返回0,如:EXISTS bar
4,對(duì)鍵重命名
RENAME key new_key 對(duì)鍵值重新命名,如:RENAME foo foo1
符號(hào)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 含義
??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 匹配一個(gè)字符
?*? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 匹配任意個(gè)(包括0個(gè))字符
?[]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配括號(hào)間的任一字符,可以使用“-”符號(hào)來(lái)表示范圍
\x? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配字符x,\用于轉(zhuǎn)義符號(hào)。如要匹配“?” 就需要使用\?
5,設(shè)置key的過(guò)期時(shí)間
(1),通過(guò)EXPIRE key seconds 來(lái)設(shè)置過(guò)期時(shí)間
如:SET bar abd
EXPIRE bar 1000
(2),TTL 可以查看key還剩余的時(shí)間, -1表示永久, -2表示不存在
如:TTL bar
(3),PERSIST讓鍵重新變成永久,成功返回1,否則返回0,表示鍵不存在或者本身就是永久的
如:PERSIST bar?
(4),通過(guò)SET key value EX seconds來(lái)設(shè)置過(guò)期時(shí)間,直接在設(shè)置key時(shí)就順便設(shè)置了時(shí)間如:SET? bar 123 EX 2000,也可以SETEX key seconds value 來(lái)設(shè)置過(guò)期時(shí)間,如:SETEX bar 2000 123,
6,獲取鍵值的數(shù)據(jù)類型
使用TYPE key 獲取鍵值的數(shù)據(jù)類型,Redis 中有五種數(shù)據(jù)類型,因此返回也會(huì)有五種數(shù)據(jù)類型
如:SET foo1
? ? ? ? TYPE foo
7,刪除鍵
(1),DEL key[key....]可以刪除一個(gè)或多個(gè)鍵,返回值時(shí)刪除的鍵的個(gè)數(shù)
如:DEL bar
(2),DEL命令的參數(shù)不支持通配符,但我們可以結(jié)合linux的管道和xargs命令自己實(shí)現(xiàn)刪除所有符合規(guī)則的鍵,比如要?jiǎng)h除所有以u(píng)ser開(kāi)頭的鍵,就可以:¥redis-cli KEYS "user*" | xargs redis-cli DEL,而且由于DEL命令支持多個(gè)鍵作為參數(shù),所以還可以:¥redis-cli DEL redis-cli KEYS "user*"這種方法比方法一更好一點(diǎn)。
8,清空所有數(shù)據(jù)
redis數(shù)據(jù)庫(kù)之間并不是完全隔離的,F(xiàn)LUSHALL命令可以清空一個(gè)redis實(shí)例中所有數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?數(shù)據(jù)類型
一,字符串類型-string
字符串是redis的基本數(shù)據(jù)類型,使用SET生成的鍵值對(duì),其value就是字符串類型。字符串類型可以存儲(chǔ)任何形式的字符串,
SET num? 1
APPEND num? 2? #添加字符
#如果value值是數(shù)字,還可以進(jìn)行加減,
如INCR num #加1
? ?DECR num #減一
#加整數(shù)
INCRBY num 10
#減整數(shù)
DECRBY num 5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?列表-list
1,添加元素:
#LPUSH 左邊添加(棧 先進(jìn)后出)LPUSH myli? 3 4 5?
# RPUSH 右邊添加(隊(duì)列 先進(jìn)先出)? RPUSH myli 2 1
2,獲取列表長(zhǎng)度
LLEN myli
3,查看指定位置元素
LINDEX myli 3
4,獲取列表片段
LRANGE myli 0 5
LRANGE myli 0 -1? ? ? ?-1表示最后一個(gè)
5,彈出元素
LPOP myli #從左邊彈出元素
RPOP myli#從右邊彈出元素
LREM key count value
1,LREM myli 2 1 #當(dāng)count>0時(shí)LREM命令會(huì)從列表左邊開(kāi)始刪除前count個(gè)值為value的元素
2,LREM myli -1 2 #? 當(dāng)count<0時(shí)LREM命令會(huì)從列表右邊開(kāi)始刪除前|count|個(gè)值為value的元素
3,LREM myli 0 4 #當(dāng)count=0時(shí)LREM命令會(huì)刪除所有值為value的元素
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?哈希類型-hash
散列類型不能嵌套其他的數(shù)據(jù)類型,一個(gè)散列類型鍵可以包含至多232-1個(gè)字段。
? 設(shè)置和獲取
1,HSET key field value #設(shè)置
如:HSET bd name budong,? ? ? ?HSET bd age 18
2,HGET key field#獲取
如:HGET bd name
3,HMSET key field value [field value ...]
如:HMSET ks name kongshan age 18 #設(shè)置多個(gè)
4,HMGET key field[field ...] #獲取多個(gè)
如:HMGET ks name age
5,HKEYS bd #獲取所有keys
6,HVALS bd#獲取所有value
7,HGETALL key #獲取所有key和value, 如:HGETALL bd?
8,HLEN bd #獲取filed個(gè)數(shù)
判斷字段是否存在
HEXISTS key field
HEXISTS bd size #存在返回1 不存在返回0
HSETNX bd size 180 # 不存在是添加,存在什么也不做
增加數(shù)字
HINCRBY key field increment
如:HINCRBY bd age 2
刪除字段
HDEL key field[filed...] #刪除一個(gè)或多個(gè)字段
如:HDEL bd size
? ? ? ? ? ? ? ? ? ? ? ? ? ? 集合-set
增,查,刪元素
1,SADD key member [member...]#增加元素
如:SADD se1 1 2 3 a b? ? ,? ? ? SADD se2 a b c 1 2
2,SREM key member [member ...]#刪除元素
如:SREM se1 2 #刪除指定元素? ? ? ? ? ? ? ?SPOP key [cout] #隨機(jī)刪除count個(gè)元素 如:SPOP se2隨機(jī)刪除兩個(gè)元素
3,判斷元素是否存在
如:SISMEMBER se1 1 #
4,SMEMBERS key #獲取所有元素
如:SMEMBERS se1
5,SCARD key #獲取集合元素個(gè)數(shù)
如:SCARD se1
隨機(jī)獲取count? 個(gè)數(shù)元素count為正數(shù),返回count個(gè)不重復(fù)數(shù),為負(fù)數(shù)可能出現(xiàn)重復(fù)數(shù)據(jù),
交集
SINTER key1 key2....
如:SINTER key1 key2#求se1和se2交集
SINTERSTORE destination key1 key2.....
如SINTERSTORE se3 se1 se2#將交集保存到se3中
并集
SUNION key1 key2
如:SUNION se1 se2
SUNIONSTORE destination key1 key2
如:SUNIONSTORE se4 se1 se2 #將并集保存在se4中
差集
SDIFF key1 key2
如:SDIFF se1 se2
SDIFFSTORE destination key1 key2
SDIFFSTORE se5 se1 se2? # 將差集保存到se5中
有序集合-zset
增加,獲取,刪除元素
1,ZADD key score member [score member ...]
如:ZADD math 90 bd 86 ks 88 yf
ZADD 可以用雙精度浮點(diǎn)數(shù),+inf表示正無(wú)窮 -inf表示負(fù)無(wú)窮
2,ZCARD key
ZCARD math #查看元素個(gè)數(shù)
3,ZSCORE key member #獲取元素分?jǐn)?shù)
如:ZSCORE math bd
4,ZRANGE key start stop[WITHSCORES]? 從小到大打印 加上WITHSCORES 同時(shí)打印分?jǐn)?shù),
如:ZRANGE math 0 -1
ZREVRANGE key start stop [WITHSCORES] #從小到大打印
如:ZREVRANGE math 0 -1
5,ZREM key member #移除元素
如:ZREM math yf
獲取指定分?jǐn)?shù)范圍的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
按照元素分?jǐn)?shù)從小到大的順序返回分?jǐn)?shù)在min和max之間(包含min和max)LIMIT 向后偏移offset個(gè)元素,并且只獲取前count個(gè)元素。
如:ZRANGEBYSCORE math 70 90
ZRANGEBYSCORE math 70 (90 LIMIT 12#不取90
獲取指定分?jǐn)?shù)范圍的元素個(gè)數(shù)
ZCOUNT key min max
如:ZCOUNT math 70 90
增加某個(gè)元素的分?jǐn)?shù)
ZINCRBY key increment member
ZINCRBY math 5 bd? #增加5分,分?jǐn)?shù)可以為負(fù)數(shù),表示減分
按照排名范圍刪除元素
ZREMRANGEBYRANK key start stop
ZADD test 1 a 2 b 3 c 4 d 5 e?
ZREMRANGEBYRANK? ?test 0 2 #刪除排名1到3的元素
ZRANGE test 0 -1?
按照分?jǐn)?shù)范圍刪除元素
ZREMRANGEBYSCORE key min max
如:ZADD test 1 a 2 b 3 c 4 d 5 e 6 f
ZREMRANGEBYSCORE test (3 5 #刪除分?jǐn)?shù)大于3小于5的元素
計(jì)算有序集合的交集
ZINTERSTORE destination numkeys key [key...][WEIGHTS weight[weight...]][AGGREGATE SUM|MIN|MAX]
計(jì)算多個(gè)有序集合的交集并將結(jié)果存儲(chǔ)在destination鍵中(同樣以有序集合類型存儲(chǔ)),返回值為destination鍵中的元素個(gè)數(shù),destination鍵中元素的分?jǐn)?shù)是由AGGREGATE參數(shù)決定的,默認(rèn)是SUM
ZADD s2 10 a 20 b
ZINTERSTORE s3 2 s1 s2 #2是指有幾個(gè)集合交集的意思,并集ZUNIONSTORE用法類似。
五種數(shù)據(jù)類型
string:SET APPEND
list:LPUSH,LRANGE,LPOP,LREM
hash:hset,hkeys,hdel
set:SADD,SREM,SPOP,SMEMBERS,SINTER,SUNION,SDIFF
ZSet:ZADD,ZRANGE,ZRANGEBYSCORE,ZCOUNT,