成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介

ghnor / 1024人閱讀

摘要:上一篇文章實(shí)戰(zhàn)第一章初識(shí)第一節(jié)簡(jiǎn)介下一篇文章實(shí)戰(zhàn)第一章初識(shí)第三節(jié)你好文章投票試煉可以存儲(chǔ)鍵與種不同的數(shù)據(jù)結(jié)構(gòu)類(lèi)型之間的映射,這中數(shù)據(jù)結(jié)構(gòu)類(lèi)別分別是字符串列表集合散列和有序集合。

上一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第一節(jié):Redis簡(jiǎn)介
下一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第三節(jié):你好Redis-文章投票試煉

Redis可以存儲(chǔ)鍵與5種不同的數(shù)據(jù)結(jié)構(gòu)類(lèi)型之間的映射,這5中數(shù)據(jù)結(jié)構(gòu)類(lèi)別分別是:STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZZET(有序集合)。

大部分程序員應(yīng)該都不會(huì)對(duì)STRING、LIST、HASH這三種結(jié)構(gòu)感到陌生,因?yàn)樗麄兒秃芏嗑幊陶Z(yǔ)言?xún)?nèi)建的字符串、列表和散列等結(jié)構(gòu)在實(shí)現(xiàn)和語(yǔ)義(semantics)方面都非常類(lèi)似。有些編程語(yǔ)言還有集合數(shù)據(jù)結(jié)構(gòu),在實(shí)現(xiàn)和語(yǔ)義上類(lèi)似于Redis的SET。ZSET在某種程度上是一種Redis特有的結(jié)構(gòu),但是當(dāng)你熟悉它之后,就會(huì)發(fā)現(xiàn)它也是一種非常有用的結(jié)構(gòu)。下表對(duì)比了Redis提供的5種結(jié)構(gòu),說(shuō)明了這些結(jié)構(gòu)存儲(chǔ)的值,并簡(jiǎn)單介紹了他們的語(yǔ)音。

結(jié)構(gòu)類(lèi)型 結(jié)構(gòu)存儲(chǔ)的值 結(jié)構(gòu)的讀寫(xiě)能力
STRING 可以是字符串、整數(shù)、浮點(diǎn)數(shù) 對(duì)整個(gè)字符串或者字符串的其中一部分執(zhí)行操作,對(duì)整數(shù)或浮點(diǎn)數(shù)執(zhí)行自增(increment)或者自減(decrement)操作。
LIST 一個(gè)鏈表,鏈表上的每個(gè)節(jié)點(diǎn)都包含了一個(gè)字符串 從鏈表的兩端推入或者彈出元素;根據(jù)偏移量對(duì)鏈表進(jìn)行修剪(trim);讀取單個(gè)或者多個(gè)元素;根據(jù)值查找或則移除元素。
SET 包含字符串的無(wú)序收集器(unordered collection),并且被包含的每個(gè)字符串都是獨(dú)一無(wú)二、各不相同 添加、獲取、移除單個(gè)元素;檢查一個(gè)元素是否存在于集合中;計(jì)算交集、并集、差集;從集合中隨機(jī)獲取元素
HASH 包含鍵值對(duì)的無(wú)序散列表 添加、獲取、移除單個(gè)鍵值對(duì);獲取所有鍵值對(duì)。
ZSET(有序集合) 字符串成員(member)與浮點(diǎn)數(shù)分值(score)之間的有序映射,元素的排列順序由分值的大小決定 添加、獲取、刪除單個(gè)元素;根據(jù)分值范圍(range)或者成員來(lái)獲取元素。
字符串

Redis的字符串和其他編程語(yǔ)言或者其他鍵值存儲(chǔ)提供的字符串非常類(lèi)似。

字符串擁有一些和其他鍵值存儲(chǔ)相似的命令,例如:GET(獲取值)、SET(設(shè)置值)和DEL(刪除值)。

下表展示了字符串的基本命令:

命令 行為
GET 獲取存儲(chǔ)在給定鍵中的值
SET 設(shè)置存儲(chǔ)在給定鍵中的值
DEL 刪除存儲(chǔ)在給定鍵中的值(這個(gè)命令可以用于所有類(lèi)型)
實(shí)例:SET、GET、DEL使實(shí)例
import redis #導(dǎo)入redis包包

#與本地redis進(jìn)行鏈接,地址為:localhost,端口號(hào)為6379
r=redis.StrictRedis(host="localhost",port=6379)
print(r.set("Hello","World"))#SET命令執(zhí)行成功,會(huì)返回OK,在Python中返回True

print(r.get("Hello")) #獲取指定鍵【Hello】對(duì)應(yīng)的值

r.delete("Hello") #刪除

print(r.get("Hello"))

結(jié)果

True
b"World"
None
列表

Redis對(duì)鏈表(linked-list)結(jié)構(gòu)的支持使得它在鍵值存儲(chǔ)的世界中獨(dú)樹(shù)一幟,一個(gè)列表結(jié)構(gòu)可以有序的存儲(chǔ)多個(gè)字符串。

Redis列表可執(zhí)行的操作和很多編程語(yǔ)言里面的列表操作非常相似,下標(biāo)列出了列表命令:

命令 行為
RPUSH 將給定值推入列表的右端
LPUSH 將給定值推入列表的左端
LRANGE 獲取列表在給定范圍內(nèi)的所有值
LINDEX 獲取列表在給定位置上的單個(gè)元素
LPOP 從列表的左端彈出一個(gè)值,并返回被彈出的值
RPOP 從列表的右端彈出一個(gè)值,并返回被彈出的值
實(shí)例:
import redis #導(dǎo)入redis包包

#與本地redis進(jìn)行鏈接,地址為:localhost,端口號(hào)為6379
r=redis.StrictRedis(host="localhost",port=6379)

r.delete("list-key")

print(r.rpush("list-key","item1")) #向列表推入新的元素,語(yǔ)句返回列表執(zhí)行該語(yǔ)句后的長(zhǎng)度
print(r.rpush("list-key","item2")) #向列表推入新的元素,語(yǔ)句返回列表執(zhí)行該語(yǔ)句后的長(zhǎng)度

print(r.lrange("list-key",0,-1)) #0為起始索引,-1表示列表結(jié)束索引,這樣就可以取出列表的所有元素

print(r.lindex("list-key",1)) #lindex取出單個(gè)元素

結(jié)果

1
2
[b"item1", b"item2"]
b"item2"
集合

Redis的集合和列表都可以存儲(chǔ)多個(gè)字符串,他們的不同在于,列表可以存儲(chǔ)多個(gè)相同的字符串,而集合則通過(guò)使用散列表來(lái)保證自己存儲(chǔ)的每個(gè)字符串都是各不相同的。

因?yàn)镽edis的集合使用無(wú)序(unordered)方式存儲(chǔ)元素,所以不能像使用列表那樣,將元素推入集合的某一端,或者從集合的某一端彈出元素。

下表列出了集合的命令:

命令 行為
sadd 將給定元素添加到集合
smembers 返回集合包含的所有元素,如果集合包含的元素非常多,那么該命令的執(zhí)行速度可能會(huì)很慢
sismember 檢查給定元素是否存在于集合中
srem 如果給定集合存在于集合中,那么移除這個(gè)元素
實(shí)例:
import redis #導(dǎo)入redis包包

#與本地redis進(jìn)行鏈接,地址為:localhost,端口號(hào)為6379
r=redis.StrictRedis(host="localhost",port=6379)

r.delete("set-key")

print(r.sadd("set-key","item1")) #向集合中添加新的元素,語(yǔ)句返回1表示這個(gè)元素被成功添加到集合中,返回0則表示這個(gè)元素已經(jīng)存在集合中
print(r.sadd("set-key","item2")) #向集合中添加新的元素,語(yǔ)句返回1表示這個(gè)元素被成功添加到集合中,返回0則表示這個(gè)元素已經(jīng)存在集合中
print(r.sadd("set-key","item3")) #向集合中添加新的元素,語(yǔ)句返回1表示這個(gè)元素被成功添加到集合中,返回0則表示這個(gè)元素已經(jīng)存在集合中

print(r.sadd("set-key","item3")) #向集合中添加新的元素,語(yǔ)句返回1表示這個(gè)元素被成功添加到集合中,返回0則表示這個(gè)元素已經(jīng)存在集合中

print(r.smembers("set-key")) #返回集合包含的所有元素

print(r.sismember("set-key","item1")) #判斷一個(gè)元素是否存在于集合匯總
print(r.sismember("set-key","item4")) #判斷一個(gè)元素是否存在于集合匯總

print(r.srem("set-key","item1")) #如果指定元素在集合中存在,就移除,結(jié)果返回移除元素的數(shù)量
print(r.srem("set-key","item4")) #如果指定元素在集合中存在,就移除,結(jié)果返回移除元素的數(shù)量

print(r.smembers("set-key")) #返回集合包含的所有元素

結(jié)果:

1
1
1
0
{b"item2", b"item3", b"item1"}
True
False
1
0
{b"item2", b"item3"}
散列

Redis的散列可以存儲(chǔ)多個(gè)鍵值對(duì)之間的映射。和字符串一樣,散列存儲(chǔ)的值既可以是字符串也可以是數(shù)字值,并且同樣可以對(duì)散列存儲(chǔ)的數(shù)字值執(zhí)行自增操作或者自減操作。

下表列出了散列的命令:

命令 行為
hset 在散列里面關(guān)聯(lián)給定的鍵值對(duì)
hget 獲取指定散列鍵的值
hgetall 獲取散列包含的所有鍵值對(duì)
hdel 如果給定鍵存在于散列中,那么移除這個(gè)鍵
實(shí)例:
import redis #導(dǎo)入redis包包

#與本地redis進(jìn)行鏈接,地址為:localhost,端口號(hào)為6379
r=redis.StrictRedis(host="localhost",port=6379)

r.delete("hash-key")

print(r.hset("hash-key","sub-key1","value1")) #如果返回1,表示散列中不存在該鍵值對(duì),返回0表示存在該鍵值對(duì)
print(r.hset("hash-key","sub-key2","value2")) #如果返回1,表示散列中不存在該鍵值對(duì),返回0表示存在該鍵值對(duì)
print(r.hset("hash-key","sub-key1","value1")) #如果返回1,表示散列中不存在該鍵值對(duì),返回0表示存在該鍵值對(duì)

print(r.hgetall("hash-key"))


print(r.hdel("hash-key","sub-key1")) #如果存在,就刪除返回1,不存在返回0
print(r.hdel("hash-key","sub-key3")) #如果存在,就刪除返回1,不存在返回0

print(r.hget("hash-key","sub-key2"))

print(r.hgetall("hash-key"))

結(jié)果:

1
1
0
{b"sub-key1": b"value1", b"sub-key2": b"value2"}
1
0
b"value2"
{b"sub-key2": b"value2"}
有序集合

有序集合和散列一樣,都用于存儲(chǔ)鍵值對(duì):有序集合的鍵被稱(chēng)為【成員】(member),每個(gè)成員都是各不相同的;而有序集合的值則被稱(chēng)為【分值】(score),分值必須為浮點(diǎn)數(shù)。

有序集合是Redis里面唯一一個(gè)既可以根據(jù)成員訪問(wèn)元素(這一點(diǎn)和散列表一樣),又可以根據(jù)分值以及分值的排列順序來(lái)訪問(wèn)元素的結(jié)構(gòu)。

下表列出了有序集合的命令

命令 行為
zadd 將一個(gè)帶有給定分值的成員添加到有序集合里面
zrange 根據(jù)元素在有序排列中所處的位置,從有序集合里面獲取多個(gè)元素。
zrangebyscore 獲取有序集合在給定分值范圍內(nèi)的所有元素
zrem 如果給定元素存在于有序集合,那么移除這個(gè)成員。
實(shí)例:
import redis #導(dǎo)入redis包包

#與本地redis進(jìn)行鏈接,地址為:localhost,端口號(hào)為6379
r=redis.StrictRedis(host="localhost",port=6379)

r.delete("zset-key")

print(r.zadd("zset-key",7,"member1")) #返回添加元素的數(shù)量
print(r.zadd("zset-key",9,"member2")) #返回添加元素的數(shù)量
print(r.zadd("zset-key",8,"member3")) #返回添加元素的數(shù)量
print(r.zadd("zset-key",7,"member3")) #返回添加元素的數(shù)量,如果存在就覆蓋值


print(r.zrange("zset-key",0,-1)) #h獲取有序集合所包含的所有元素,多個(gè)元素或安裝分值大小進(jìn)行排序

print(r.zrangebyscore("zset-key",0,7)) #根據(jù)分值來(lái)獲取集合中的一部分元素

print(r.zrem("zset-key","member1")) #返回移除元素的數(shù)量

print(r.zrange("zset-key",0,-1)) #h獲取有序集合所包含的所有元素,多個(gè)元素或安裝分值大小進(jìn)行排序



結(jié)果:

1
1
1
0
[b"member1", b"member3", b"member2"]
[b"member1", b"member3"]
1
[b"member3", b"member2"]
上一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第一節(jié):Redis簡(jiǎn)介
下一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第三節(jié):你好Redis-文章投票試煉

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42514.html

相關(guān)文章

  • Python--Redis實(shí)戰(zhàn)一章初識(shí)Redis第一節(jié):Redis簡(jiǎn)介

    摘要:上一篇文章實(shí)戰(zhàn)安裝下一篇文章實(shí)戰(zhàn)第一章初識(shí)第二節(jié)數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介是一個(gè)遠(yuǎn)程內(nèi)存數(shù)據(jù)庫(kù),它不僅性能強(qiáng)勁,而且還具有復(fù)制特性以及為解決問(wèn)題而生的獨(dú)一無(wú)二的數(shù)據(jù)模型,是一個(gè)速度非??斓姆顷P(guān)系數(shù)據(jù)庫(kù)。 上一篇文章:Pyhton--Redis實(shí)戰(zhàn):Mac brew安裝redis下一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介 Redis是一個(gè)遠(yuǎn)程內(nèi)...

    enali 評(píng)論0 收藏0
  • Python--Redis實(shí)戰(zhàn)一章初識(shí)Redis:第三節(jié):你好Redis-文章投票試煉

    摘要:為了防止用戶(hù)對(duì)同一篇文章進(jìn)行多次投票,網(wǎng)站需要為每一篇文章記錄一個(gè)已投票用戶(hù)名單。上一篇文章實(shí)戰(zhàn)第一章初識(shí)第二節(jié)數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介下一篇文章實(shí)戰(zhàn)第二章使用構(gòu)建應(yīng)用第一節(jié)登錄和緩存 上一篇文章: Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介下一篇文章:Python--Redis實(shí)戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第一節(jié):登錄和cookie緩存 ...

    Meils 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<