Python(二十四)Redis的介紹與使用

智能AI—自動寫網(wǎng)文:
今天早上寫程序查資料的時候,在博客上看到一個非常有趣的東西—自動寫網(wǎng)文大師,該項目主要是靠AI模型深度學習(這里的深度學習指的是閱讀了100G以上的文章)后自動寫網(wǎng)文,程序運行后,一秒十字,且每次重新運行后,得到的小說、故事風格不同,但此程序開發(fā)有些問題,因為AI不具備任何網(wǎng)文以外的常識,所以寫的內(nèi)容不是非常貼近現(xiàn)實,而且沒有人的真情實感,但文章風格還是值得學習(畢竟前無古人后無來者),總的來說看完100G的文章,呃...感覺還是像個小白吧!不過隨著開發(fā)代碼的修改與常識方面閱讀量的提升,我相信該AI模型水平也會有所提高吧!

AI練習—自由創(chuàng)作

針對這個模型我發(fā)表一下個人看法:這種項目的開發(fā)還是覺得用來娛樂比較好,想寫網(wǎng)文卻沒有好的想法時也可以瞅瞅,單單留下來自己欣賞閱讀還是可以的。

再過兩三個月我的Python系列就要邁入人工智能方向了,到時再與大家深入探討。接下來說說今天的內(nèi)容,非關(guān)系型數(shù)據(jù)庫Redis。

1. NoSQL和Redis的簡介:

1.1. NoSQL:

說到 Redis 就不得不說到NoSQL,NoSQL-Not Only SQL,指的是非關(guān)系型數(shù)據(jù)庫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱,NoSQL是web2.0時代海量數(shù)據(jù)催生的產(chǎn)物。

1.2. NoSQL的三個特點:

1、不支持SQL語法:
NoSQL的世界中沒有一種通用的語法,每種NoSQL數(shù)據(jù)庫都有自己的語法,以及擅長的業(yè)務(wù)場景;
2、讀寫性能高:
NoSQL數(shù)據(jù)庫存在于內(nèi)存當中,都具有非常高的讀寫性能,尤其在海量數(shù)據(jù)下,它的表現(xiàn)非常優(yōu)秀;
3、靈活的數(shù)據(jù)模型
NoSQL的存儲方式十分靈活,存儲方式可以是JSON文檔,鍵值對(Key Value)或者其他方式。

1.3. Redis是NoSQL的一種:

Redis全稱:Remote Dictionary Sever(遠程字典服務(wù)器)的縮寫,以宇典結(jié)構(gòu)存儲數(shù)據(jù),并允許其他應(yīng)用通過TCP協(xié)議讀寫字典中的內(nèi)容。使用C語言編寫,并以內(nèi)存作為數(shù)據(jù)存儲介質(zhì),所以讀寫數(shù)據(jù)的效率極高。

1.4. Redis的特點有三:

1、Redis支持數(shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用;
2、Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還把value分為list,set,zset,hash,string等數(shù)據(jù)結(jié)構(gòu)存儲;
3、因為Redis交換數(shù)據(jù)快,所以在服務(wù)器中常用來存儲一些需要頻繁調(diào)取的數(shù)據(jù),提高效率。

2. Redis基本使用

2.1. 啟動和關(guān)閉

2.1.1. 啟動:

redis-server:啟動redis服務(wù)器

開啟服務(wù)

2.1.2. 關(guān)閉

redis-cli shutdown可以保存數(shù)據(jù),若強行停止則會丟失數(shù)據(jù)。

2.1.3. 多數(shù)據(jù)庫

Redis默認支持16個數(shù)據(jù)庫,以從0開始的遞增數(shù)字命名。
選擇使用數(shù)據(jù)庫8:select 8,默認是使用數(shù)據(jù)庫0,若超出范圍則會報錯。

2.1.4. 命令行客戶端

方法一:將命令作為redis-cli的參數(shù)執(zhí)行
redis-cli -h 127.0.0.1 -p 6379
redis-cli ping
方法二:進入交互模式
redis-cli

3. Redis基礎(chǔ)命令

設(shè)置一個新的鍵值對:set num 1(set key value)
設(shè)置多個新的鍵值對:mset num1 111 num2 222 num3 333(mset key1 value1 key2 value2...)
獲取對應(yīng)的所有的鍵:keys *
返回單個key對應(yīng)的value值,沒有則返回nil,表示空:get num(get key)
返回多個key對應(yīng)的value值,沒有則返回nil,表示空:mget num1 num2 num3(mget key1 key2 key3)


獲得符合規(guī)則的鍵:
keys num?:查詢num后面任意加一個字符的鍵
keys num\?:查詢num?鍵。\表示轉(zhuǎn)義

keys num[1-2]:查詢num后跟字符1到2的鍵

exists num4:判斷鍵是否存在,不存在則返回0,存在則返回1

rename num? num4:將num?鍵名修改為num4

expire num4 1:1秒后刪除鍵。
expire num 300:300秒后刪除鍵。
ttl num:查看待刪除時間,-1表示永久,-2表示不存在該鍵。
persist num可以將num鍵重新變?yōu)橛谰谩?表示成功,0表示失敗。
set yzm 123987 ex 300:創(chuàng)建一個值為123987的yzm鍵,待刪除時間為300秒。

type num:num鍵類型

del num:刪除yzm鍵

因為del無法使用通配符,所以要想批量刪除滿足規(guī)則的內(nèi)容,需要退出redis,結(jié)合linux的管道符和xargs來刪除滿足規(guī)則的內(nèi)容。
exit:關(guān)閉redis。
redis-cli keys 'num?' | xargs redis-cli del:在linux界面刪除redis中滿足規(guī)則num?的數(shù)據(jù)。

flushdb:清除該數(shù)據(jù)庫0中的數(shù)據(jù)。
flushall:清楚所有數(shù)據(jù)。

4. Redis數(shù)據(jù)類型:

4.1. 字符串:

與基本命令操作相同
set num 123:設(shè)置num鍵值為123


append num 4:添加字符4。
get num:查看num鍵的值。
incr num當num鍵的值為純數(shù)字時,可以加1。
decr num當num鍵的值為純數(shù)字時,可以加1。
incrby num 10當num鍵的值為純數(shù)字時,可以加10。
decrby num 10當num鍵的值為純數(shù)字時,可以減10。

append num abcd:當num鍵的值不只有數(shù)字時,加10會報錯。

4.2. 列表:

lpush myli 3 4 5:左邊添加(棧 先進后出)。
rpush myli 2 1:右邊添加(隊列 先進先出)。
llen myli:獲取列表長度。
lindex myli 0:查看索引0位置元素。
lindex myli 1:查看索引1位置元素。
lindex myli 2:查看索引2位置元素。
lrange myli 0 -1:獲取列表片段從0到﹣1。
lrange myli 0 4:獲取列表片段從0到4,與Python不同,這里是閉區(qū)間,而不是半開半閉區(qū)間。


lpop myli:刪除最左邊元素,并返回。
rpop myli:刪除最右邊元素,并返回。
lrange myli 0 4:獲取列表片段從0到4。
lpush myli a a a a:左邊添加(棧 先進后出)。
rpush myli a a a a:右邊添加(隊列 先進先出)。
lrange myli 0 -1:獲取列表片段從0到﹣1。

刪除格式:lrem key count value
lrem myli -2 a:當count小于0時,從列表右邊開始刪除2個為a的數(shù)據(jù)。
lrem myli 2 a:當count大于0時,從列表左邊開始刪除2個為a的數(shù)據(jù)。
lrem myli 4 a:當count等于0時,刪除所有值為a的數(shù)據(jù)。

4.3. 哈希類型:

Redis是采用字典結(jié)構(gòu)以鍵值對的形式存儲數(shù)據(jù)的,而散列類型(hash)的鍵值也是一種字典結(jié)構(gòu),其存儲了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他數(shù)據(jù)類型,換句話說,散列類型不能嵌套其他的數(shù)據(jù)類型。一個散列類型鍵可以包含至多232-1個字段。
單個:
hset mr name moran:添加一個用戶mr,設(shè)置名字為moran。
hget mr name:獲取mr的名字。


多個:
hmset mr age 18 height 180:設(shè)置mr鍵,年齡為18,身高為180。

hmget mr name age height:獲取mr鍵的名字、年齡、身高。

hkeys mr:獲取mr用戶的所有鍵。
hvals mr:獲取mr用戶的所有值。

hgetall mr:獲取mr用戶的所有鍵值對。
hlen mr:獲取mr用戶的鍵值對長度。

hexists mr size:查看mr用戶是否存在鍵size。
hexists mr name:查看mr用戶是否存在鍵name。
存在返回1,不存在返回0。

hsetnx mr sex abcd:不存在添加,存在啥也不做。

hincrby bd age 9:給bd用戶增加年齡值為9。
hincrby bd age -5:給bd用戶增加年齡值為-5,及減少年齡。
hdel bd age:刪除bd用戶的age鍵。

hdel mr sex height:刪除mr用戶的sex、height鍵。

4.4. 集合:

sadd se 1 1 2 2 3 3 4 4 5 a b c:添加元素1 1 2 2 3 3 4 4 5 a b c至se里。
smembers se:查看集合se的所有元素。


srem se 5:刪除集合se里的元素5。
smembers se:查看集合se的所有元素。
spop se 2:隨機刪除兩個元素。

sismember se 1:查看1元素是否在集合se內(nèi),在,返回1。
sismember se 0:查看0元素是否在集合se內(nèi),不在,返回0。
scard se:查看se里的元素長度。
sadd b c 1 2:添加元素c 1 2至b里。
del b:刪除b元素
keys *:查看數(shù)據(jù)庫0中有多少鍵。(基本命令)

格式:srandmember key count,count為正,返回count個不重復數(shù),count為負,出現(xiàn)重復數(shù)據(jù)。
srandmember se 3:從se中隨機獲取3個元素,和之前不重復。
srandmember se -3:從se中隨機獲取3個元素,和之前有重復。

交集:
sinter se1 se2:查看se1和se2的交集。
sinterstore se3 se1 se2:將se1和se2的交集存儲在se3中。

并集:
sunion se3 se1 se2:查看se1和se2的并集。
sunionstore se3 se1 se2:將se1和se2的并集存儲在se3中。

差集:
sdiff se1 se2:查看se1與se2的se1差集。
sdiff se2 se1:查看se2與se1的se2差集。
sdiffstore se4 se1 se2:將se1與se2的se1差集存儲在se4中。

4.5. 有序集合(zset):

有序集合:
在集合類型的基礎(chǔ)上有序集合類型為集合中的每個元素都關(guān)聯(lián)了一個分數(shù),這使得我們不僅可以完成插入、刪除和判斷元素是否存在等集合類型支持的操作,還能夠獲得分數(shù)最高(或最低)的前N個元素、獲得指定分數(shù)范圍內(nèi)的元素等與分數(shù)有關(guān)的操作。雖然集合中每個元素都是不同的,但是它們的分數(shù)卻可以相同。

特點和差別:
(1)列表類型是通過鏈表實現(xiàn)的,獲取靠近兩端的數(shù)據(jù)速度極快,而當元素增多后,訪問中間數(shù)據(jù)的速度會較慢,所以它更加適合實現(xiàn)如“新鮮事”或“日志”這樣很少訪問中間元素的應(yīng)用。
(2)有序集合類型是使用散列表和跳躍表(Skiplist)實現(xiàn)的,所以即使讀取位于中間部分的數(shù)據(jù)速度也很快(時間復雜度是O(log(N)))。
(3)列表中不能簡單地調(diào)整某個元素的位置,但是有序集合可以(通過更改這個元素的分數(shù))。
(4)有序集合要比列表類型更耗費內(nèi)存。有序集合類型算得上是Redis的5種數(shù)據(jù)類型中最高級的類型了,在學習時可以與列表類型和集合類型對照理解.

zadd math 100 mr 90 wz 80 ay 70 yg 60 zl 18 bd:添加值100給鍵mr、值90給鍵wz、值80給鍵ay、值70給鍵yg、值60給鍵zl、值18給鍵bd至有序集合math里。
zcard math:查看有序集合math里的數(shù)據(jù)個數(shù)。
zscore math ay:獲取math里的ay分數(shù)。


zrange math 0 -1:獲取math里的所有值,并按照從低到高排序,不展示分數(shù)。
zrange math 0 -1 withscores:獲取math里的所有值,并按照從低到高排序,展示分數(shù)。
zrevrange math 0 -1 withscores:獲取math里的所有值,并按照從高到低排序,展示分數(shù)。

zrem math zl:刪除math里的zl。
zrangebyscore math 60 100:篩選出math里從60到100的值。

zrangebyscore math (60 100 withscores:篩選出math里從60開區(qū)間到100閉區(qū)間的值,展示分數(shù)。
zrangebyscore math (60 (100 withscores:篩選出math里從60開區(qū)間到100開區(qū)間的值,展示分數(shù)。
zrangebyscore math 60 100 withscores limit 1 2:篩選出math里從60閉區(qū)間到100閉區(qū)間的值,展示分數(shù),limit 1 2表示只獲取索引1到2。

格式:zcount key min max:獲取從min閉到max閉的有序集合key長度。
zcount math 60 100:獲取從60閉到100閉的有序集合math長度。
zincrby math 30 bd:給math里的bd加30分。

zincrby math -2 mr:給math里的mr加-2分。
zremrangebyrank math 0 1:按照排名范圍,刪除math里的兩個元素即0到1。
zremrangebyscore math 80 90:按照分數(shù)范圍,刪除math里的兩個元素即80到90分。

交集:zinterstore zse3 2 zse1 zse2:將zse1和zse2做交集的數(shù)據(jù)存儲到zse3中,2表示兩個集合,若3個集合做交集,則寫3。
并集:zunionstore zse4 2 zse1 zse2:將zse1和zse2做并集的數(shù)據(jù)存儲到zse4中,2表示兩個集合,若3個集合做交集,則寫3。

文章到這里就結(jié)束了!希望大家能多多支持Python(系列)!六個月帶大家學會Python,私聊我,可以問關(guān)于本文章的問題!以后每天都會發(fā)布新的文章,喜歡的點點關(guān)注!一個陪伴你學習Python的新青年!不管多忙都會更新下去,一起加油!

Editor:Lonelyroots

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

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

  • 目錄: 一、介紹 二、緩存問題 三、Redis內(nèi)存濫用 四、鍵命名規(guī)范 五、Redis使用場景 六、持久化操作 七...
    實驗屋閱讀 310評論 0 1
  • ONSQL NOSQL指的是非關(guān)系型數(shù)據(jù)庫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫...
    冬風訴閱讀 528評論 0 0
  • Redis詳細介紹 Redis NoSQL:Not Only SQL,是非關(guān)系型數(shù)據(jù)庫; Web2.0對于上萬次的...
    Cherry300閱讀 896評論 1 3
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴展、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,708評論 0 36
  • Redis是什么(來源百度百科) Redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的...
    孔垂云閱讀 1,136評論 0 6

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