Nosql與Redis

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?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,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容