国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

程序員 做網(wǎng)站 微信公眾號(hào) 賺錢寧波seo推廣費(fèi)用

程序員 做網(wǎng)站 微信公眾號(hào) 賺錢,寧波seo推廣費(fèi)用,查詢公司的網(wǎng)站備案,wordpress linux位置目錄 Redis數(shù)據(jù)結(jié)構(gòu)介紹 Redis通用命令 KEYS DEL EXISTS EXPIRE String類型 Key的層級(jí)格式 Hash類型 List類型 Set類型 SortedSet類型 Redis數(shù)據(jù)結(jié)構(gòu)介紹 Redis是一個(gè)key-value的數(shù)據(jù)庫(kù),key一般是String數(shù)據(jù)庫(kù),value的類型多種多樣 可以通過(guò)…

目錄

Redis數(shù)據(jù)結(jié)構(gòu)介紹

Redis通用命令

KEYS

DEL

EXISTS

EXPIRE

String類型

Key的層級(jí)格式

Hash類型

List類型

Set類型

SortedSet類型


Redis數(shù)據(jù)結(jié)構(gòu)介紹

Redis是一個(gè)key-value的數(shù)據(jù)庫(kù),key一般是String數(shù)據(jù)庫(kù),value的類型多種多樣

可以通過(guò)help命令查看命令:

Redis通用命令

通用指令是部分?jǐn)?shù)據(jù)類型都可以使用的指令,常見(jiàn)的有:

  • KEYS:查看符合模板的所有key
  • DEL:刪除一個(gè)指定的key
  • EXISTS:給一個(gè)key設(shè)置有效期,有效期到期時(shí)該key會(huì)被自動(dòng)刪除
  • TTL:查看一個(gè)key的剩余有效期

KEYS

在生產(chǎn)環(huán)境下,不推薦使用KEYS命令,因?yàn)檫@個(gè)命令在key過(guò)多的情況下,效率不高

127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379># 查詢以a開(kāi)頭的key
127.0.0.1:6379> keys a*
1) "age"
127.0.0.1:6379>

DEL

127.0.0.1:6379> help delDEL key [key ...]summary: Delete a keysince: 1.0.0group: generic127.0.0.1:6379> del name #刪除單個(gè)
(integer) 1  #成功刪除1個(gè)127.0.0.1:6379> keys *
1) "age"127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 #批量添加數(shù)據(jù)
OK127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
4) "age"127.0.0.1:6379> del k1 k2 k3 k4
(integer) 3   #此處返回的是成功刪除的key,由于redis中只有k1,k2,k3 所以只成功刪除3個(gè),最終返回
127.0.0.1:6379>127.0.0.1:6379> keys * #再查詢?nèi)康膋ey
1) "age"	#只剩下一個(gè)了
127.0.0.1:6379>

EXISTS

127.0.0.1:6379> help EXISTSEXISTS key [key ...]summary: Determine if a key existssince: 1.0.0group: generic127.0.0.1:6379> exists age
(integer) 1127.0.0.1:6379> exists name
(integer) 0

EXPIRE

127.0.0.1:6379> expire age 10
(integer) 1127.0.0.1:6379> ttl age
(integer) 8127.0.0.1:6379> ttl age
(integer) 6127.0.0.1:6379> ttl age
(integer) -2127.0.0.1:6379> ttl age
(integer) -2  #當(dāng)這個(gè)key過(guò)期了,那么此時(shí)查詢出來(lái)就是-2 127.0.0.1:6379> keys *
(empty list or set)127.0.0.1:6379> set age 10 #如果沒(méi)有設(shè)置過(guò)期時(shí)間
OK127.0.0.1:6379> ttl age
(integer) -1  # ttl的返回值就是-1

String類型

String類型,也就是字符串類型,是Redis中最簡(jiǎn)單的存儲(chǔ)類型

其value是字符串,根據(jù)字符串的格式不同,可以分為三類:

  • string:普通字符串
  • int:整數(shù)類型,可以做自增、自減操作
  • float:浮點(diǎn)類型,可以做自增、自減操作

String常見(jiàn)的命令有:

  • SET:添加或者修改已經(jīng)存在的一個(gè)String類型的鍵值對(duì)

  • GET:根據(jù)key獲取String類型的value

  • MSET:批量添加多個(gè)String類型的鍵值對(duì)

  • MGET:根據(jù)多個(gè)key獲取多個(gè)String類型的value

  • INCR:讓一個(gè)整型的key自增1

  • INCRBY:讓一個(gè)整型的key自增并指定步長(zhǎng),例如:incrby num 2 讓num值自增2

  • INCRBYFLOAT:讓一個(gè)浮點(diǎn)類型的數(shù)字自增并指定步長(zhǎng)

  • SETNX:添加一個(gè)String類型的鍵值對(duì),前提是這個(gè)key不存在,否則不執(zhí)行

  • SETEX:添加一個(gè)String類型的鍵值對(duì),并且指定有效期

SET和GET

如果key不存在則是新增,存在則是修改

127.0.0.1:6379> set name Rose  //原來(lái)不存在
OK127.0.0.1:6379> get name 
"Rose"127.0.0.1:6379> set name Jack //原來(lái)存在,就是修改
OK127.0.0.1:6379> get name
"Jack"

MSET和MGET

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK127.0.0.1:6379> MGET name age k1 k2 k3
1) "Jack" //之前存在的name
2) "10"   //之前存在的age
3) "v1"
4) "v2"
5) "v3"

INCR、INCRBY和DECR

127.0.0.1:6379> get age 
"10"127.0.0.1:6379> incr age //增加1
(integer) 11127.0.0.1:6379> get age //獲得age
"11"127.0.0.1:6379> incrby age 2 //一次增加2
(integer) 13 //返回目前的age的值127.0.0.1:6379> incrby age 2
(integer) 15127.0.0.1:6379> incrby age -1 //也可以增加負(fù)數(shù),相當(dāng)于減
(integer) 14127.0.0.1:6379> incrby age -2 //一次減少2個(gè)
(integer) 12127.0.0.1:6379> DECR age //相當(dāng)于 incr 負(fù)數(shù),減少正常用法
(integer) 11127.0.0.1:6379> get age 
"11"

SETNX

127.0.0.1:6379> help setnxSETNX key valuesummary: Set the value of a key, only if the key does not existsince: 1.0.0group: string127.0.0.1:6379> set name Jack  //設(shè)置名稱
OK
127.0.0.1:6379> setnx name lisi //如果key不存在,則添加成功
(integer) 0
127.0.0.1:6379> get name //由于name已經(jīng)存在,所以lisi的操作失敗
"Jack"
127.0.0.1:6379> setnx name2 lisi //name2 不存在,所以操作成功
(integer) 1
127.0.0.1:6379> get name2 
"lisi"

SETEX

127.0.0.1:6379> setex name 10 jack
OK127.0.0.1:6379> ttl name
(integer) 8127.0.0.1:6379> ttl name
(integer) 7127.0.0.1:6379> ttl name
(integer) 5

Key的層級(jí)格式

如果需要存儲(chǔ)用戶和商品信息到Redis,有一個(gè)用戶id是1,一個(gè)商品id也是1,此時(shí)如果使用id作為key就會(huì)沖突

解決:通過(guò)給key添加前綴加以區(qū)分

Redis的key允許有多個(gè)單詞形成層級(jí)結(jié)構(gòu),多個(gè)單詞之間用‘:’隔開(kāi),格式如下:

例如項(xiàng)目名稱是heima,有user和product兩種不同類型的數(shù)據(jù),定義key如下:

  • user相關(guān)的key:heima:user:1

  • product相關(guān)的key:heima:product:1

如果value是一個(gè)Java對(duì)象,例如User對(duì)象,可以將對(duì)象序列化為JSON字符串后存儲(chǔ):

KEYVALUE
heima:user:1{"id":1, "name": "Jack", "age": 21}
heima:product:1{"id":1, "name": "小米11", "price": 4999}

在可視化界面中,Redis會(huì)以層級(jí)結(jié)構(gòu)來(lái)進(jìn)行存儲(chǔ),獲取數(shù)據(jù)更方便

Hash類型

Hash類型,也叫散列,其value是一個(gè)無(wú)序字典,類似于Java中的HashMap結(jié)構(gòu)

String結(jié)構(gòu)是將對(duì)象序列化為JSON字符串后存儲(chǔ),當(dāng)需要修改對(duì)象某個(gè)字段時(shí)很不方便:

Hash結(jié)構(gòu)可以將對(duì)象中的每個(gè)字段獨(dú)立存儲(chǔ),可以針對(duì)單個(gè)字段做CRUD:

Hash類型的常見(jiàn)命令:

  • HSET key field value:添加或者修改hash類型key的field的值

  • HGET key field:獲取一個(gè)hash類型key的field的值

  • HMSET:批量添加多個(gè)hash類型key的field的值

  • HMGET:批量獲取多個(gè)hash類型key的field的值

  • HGETALL:獲取一個(gè)hash類型的key中的所有的field和value

  • HKEYS:獲取一個(gè)hash類型的key中的所有的field

  • HINCRBY:讓一個(gè)hash類型key的字段值自增并指定步長(zhǎng)

  • HSETNX:添加一個(gè)hash類型的key的field值,前提是這個(gè)field不存在,否則不執(zhí)行

HSET和HGET

127.0.0.1:6379> HSET heima:user:3 name Lucy//大key是 heima:user:3 小key是name,小value是Lucy
(integer) 1
127.0.0.1:6379> HSET heima:user:3 age 21// 如果操作不存在的數(shù)據(jù),則是新增
(integer) 1
127.0.0.1:6379> HSET heima:user:3 age 17 //如果操作存在的數(shù)據(jù),則是修改
(integer) 0
127.0.0.1:6379> HGET heima:user:3 name 
"Lucy"
127.0.0.1:6379> HGET heima:user:3 age
"17"

HMSET和HMGET

127.0.0.1:6379> HMSET heima:user:4 name HanMeiMei
OK
127.0.0.1:6379> HMSET heima:user:4 name LiLei age 20 sex man
OK
127.0.0.1:6379> HMGET heima:user:4 name age sex
1) "LiLei"
2) "20"
3) "man"

HGETALL

127.0.0.1:6379> HGETALL heima:user:4
1) "name"
2) "LiLei"
3) "age"
4) "20"
5) "sex"
6) "man"

HKEYS和HVALS

127.0.0.1:6379> HKEYS heima:user:4
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "20"
3) "man"

HINCRBY

127.0.0.1:6379> HINCRBY  heima:user:4 age 2
(integer) 22
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "22"
3) "man"
127.0.0.1:6379> HINCRBY  heima:user:4 age -2
(integer) 20

HSETNX

127.0.0.1:6379> HSETNX heima:user4 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
127.0.0.1:6379> HSETNX heima:user:3 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
5) "sex"
6) "woman"

List類型

Redis中的List類型與Java中的LinkedList類似,可以看做是一個(gè)雙向鏈表結(jié)構(gòu),既可以支持正向檢索,也可以支持反向檢索

特征:

  • 有序

  • 元素可以重復(fù)

  • 插入和刪除快

  • 查詢速度一般

常用來(lái)存儲(chǔ)一個(gè)有序數(shù)據(jù),如:朋友圈點(diǎn)贊列表、評(píng)論列表

List的常見(jiàn)命令:

  • LPUSH key element ... :向列表左側(cè)插入一個(gè)或多個(gè)元素

  • LPOP key:移除并返回列表左側(cè)的第一個(gè)元素,沒(méi)有則返回nil

  • RPUSH key element ... :向列表右側(cè)插入一個(gè)或多個(gè)元素

  • RPOP key:移除并返回列表右側(cè)的第一個(gè)元素

  • LRANGE key star end:返回一段角標(biāo)范圍內(nèi)的所有元素

  • BLPOP和BRPOP:與LPOP和RPOP類似,只不過(guò)在沒(méi)有元素時(shí)等待指定時(shí)間,而不是直接返回nil

LPUSH和RPUSH

127.0.0.1:6379> LPUSH users 1 2 3
(integer) 3
127.0.0.1:6379> RPUSH users 4 5 6
(integer) 6

LPOP和RPOP

127.0.0.1:6379> LPOP users
"3"
127.0.0.1:6379> RPOP users
"6"

LRANGE

127.0.0.1:6379> LRANGE users 1 2
1) "1"
2) "4"

思考:

  • 如何利用List模擬一個(gè)棧?

? ? ? ?入口和出口在同一邊?

  • 如何利用List模擬一個(gè)隊(duì)列?

? ? ? ?入口和出口在不同邊

  • 如何利用List模擬一個(gè)阻塞隊(duì)列?

? ? ? ?入口和出口在不同邊

? ? ? ?出隊(duì)時(shí)采用BLPOP或BRPOP

Set類型

Redis的Set結(jié)構(gòu)與Java中的HashSet類似,可以看做是一個(gè)value為null的HashMap

特征:

  • 無(wú)序

  • 元素不可重復(fù)

  • 查找快

  • 支持交集、并集、差集等功能

Set類型的常見(jiàn)命令:

  • SADD key member ... :向set中添加一個(gè)或多個(gè)元素

  • SREM key member ... : 移除set中的指定元素

  • SCARD key: 返回set中元素的個(gè)數(shù)

  • SISMEMBER key member:判斷一個(gè)元素是否存在于set中

  • SMEMBERS:獲取set中的所有元素

  • SINTER key1 key2 ... :求key1與key2的交集

  • SDIFF key1 key2 ... :求key1與key2的差集

  • SUNION key1 key2 ..:求key1和key2的并集

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem s1 a
(integer) 1127.0.0.1:6379> SISMEMBER s1 a
(integer) 0127.0.0.1:6379> SISMEMBER s1 b
(integer) 1127.0.0.1:6379> SCARD s1
(integer) 2

案例:

將下列數(shù)據(jù)用Redis的Set集合來(lái)存儲(chǔ):

  • 張三的好友有:李四.王五.趙六

  • 李四的好友有:王五.麻子.二狗

  • 利用Set的命令實(shí)現(xiàn)下列功能:

  • 計(jì)算張三的好友有幾人

  • 計(jì)算張三和李四有哪些共同好友

  • 查詢哪些人是張三的好友卻不是李四的好友

  • 查詢張三和李四的好友總共有哪些人

  • 判斷李四是否是張三的好友

  • 判斷張三是否是李四的好友

  • 將李四從張三的好友列表中移除

127.0.0.1:6379> SADD zs lisi wangwu zhaoliu
(integer) 3127.0.0.1:6379> SADD ls wangwu mazi ergou
(integer) 3127.0.0.1:6379> SCARD zs
(integer) 3127.0.0.1:6379> SINTER zs ls
1) "wangwu"127.0.0.1:6379> SDIFF zs ls
1) "zhaoliu"
2) "lisi"127.0.0.1:6379> SUNION zs ls
1) "wangwu"
2) "zhaoliu"
3) "lisi"
4) "mazi"
5) "ergou"127.0.0.1:6379> SISMEMBER zs lisi
(integer) 1127.0.0.1:6379> SISMEMBER ls zhangsan
(integer) 0127.0.0.1:6379> SREM zs lisi
(integer) 1127.0.0.1:6379> SMEMBERS zs
1) "zhaoliu"
2) "wangwu"

SortedSet類型

Redis中的SortedSet是一個(gè)可排序的set集合,與Java中的TreeSet有些類似,但底層數(shù)據(jù)結(jié)構(gòu)卻差別很大

SortedSet中的每一個(gè)元素都帶有一個(gè)score屬性,可以基于score屬性對(duì)元素排序,底層的實(shí)現(xiàn)是一個(gè)跳表(SkipList)加hash表

特性:

  • 可排序

  • 元素不重復(fù)

  • 查詢速度快

因其可排序特性,常被用來(lái)實(shí)現(xiàn)排行榜這樣的功能

SortedSet的常見(jiàn)命令有:

  • ZADD key score member:添加一個(gè)或多個(gè)元素到sorted set ,如果已經(jīng)存在則更新其score值

  • ZREM key member:刪除sorted set中的一個(gè)指定元素

  • ZSCORE key member : 獲取sorted set中的指定元素的score值

  • ZRANK key member:獲取sorted set 中的指定元素的排名(從0開(kāi)始)

  • ZCARD key:獲取sorted set中的元素個(gè)數(shù)

  • ZCOUNT key min max:統(tǒng)計(jì)score值在給定范圍內(nèi)的所有元素的個(gè)數(shù)

  • ZINCRBY key increment member:讓sorted set中的指定元素自增,步長(zhǎng)為指定的increment值

  • ZRANGE key min max:按照score排序后,獲取指定排名范圍內(nèi)的元素

  • ZRANGEBYSCORE key min max:按照score排序后,獲取指定score范圍內(nèi)的元素

  • ZDIFF.ZINTER.ZUNION:求差集、交集、并集

注意:所有的排名默認(rèn)都是升序,如果要降序則在命令的Z后加REV即可,例如:

  • 升序獲取sorted set 中的指定元素的排名:ZRANK key member

  • 降序獲取sorted set 中的指定元素的排名:ZREVRANK key memeber

案例:

http://m.aloenet.com.cn/news/30372.html

相關(guān)文章:

  • 做網(wǎng)站也是一門技術(shù)惠州網(wǎng)絡(luò)營(yíng)銷
  • 網(wǎng)站 禁止ping百度seo推廣
  • 網(wǎng)站建設(shè)必學(xué)課程深圳谷歌seo推廣
  • 阿里巴巴做網(wǎng)站找誰(shuí)泰州百度seo公司
  • 網(wǎng)站運(yùn)行與維護(hù)網(wǎng)絡(luò)推廣外包內(nèi)容
  • 網(wǎng)頁(yè)上海公司seo工資服務(wù)
  • 免費(fèi)網(wǎng)站開(kāi)發(fā)軟件平臺(tái)愛(ài)站網(wǎng)長(zhǎng)尾詞挖掘工具
  • 網(wǎng)站開(kāi)發(fā)要什么樣的環(huán)境代運(yùn)營(yíng)公司
  • 網(wǎng)站建設(shè)網(wǎng)站軟文范文
  • 番禺手機(jī)網(wǎng)站制作推廣行者seo
  • 做外貿(mào)網(wǎng)站效果站長(zhǎng)是什么級(jí)別
  • 網(wǎng)站設(shè)計(jì)與網(wǎng)頁(yè)配色實(shí)例精講nba最新新聞新浪
  • 做英文企業(yè)網(wǎng)站多錢錢上海百度推廣官方電話
  • 建設(shè)標(biāo)準(zhǔn) 免費(fèi)下載網(wǎng)站磁力天堂torrentkitty
  • 部落沖突做任務(wù)網(wǎng)站百度熱搜廣告位
  • 給公司做網(wǎng)站銷售怎樣啦網(wǎng)絡(luò)公司品牌推廣
  • 企業(yè)戰(zhàn)略規(guī)劃方案北京seo網(wǎng)絡(luò)推廣
  • 網(wǎng)頁(yè)設(shè)計(jì)公司金華關(guān)鍵詞排名優(yōu)化公司外包
  • 網(wǎng)站建設(shè)利益分析合肥網(wǎng)站seo推廣
  • 建立健全制度如何推廣seo
  • 網(wǎng)站建設(shè) 售后服務(wù)seo下拉優(yōu)化
  • 鄭州正規(guī)網(wǎng)站設(shè)計(jì)價(jià)格seo門戶
  • 漳州網(wǎng)站優(yōu)化下載百度導(dǎo)航app
  • 交友網(wǎng)站建設(shè)惠城網(wǎng)站設(shè)計(jì)
  • 任縣企業(yè)做網(wǎng)站怎么推廣淘寶店鋪
  • 織夢(mèng)手機(jī)網(wǎng)站源碼下載可口可樂(lè)軟文范例
  • 淘寶客優(yōu)惠券網(wǎng)站怎么做的google怎么推廣
  • 怎么在網(wǎng)上做公司網(wǎng)站如何創(chuàng)建自己的網(wǎng)址
  • 建設(shè)兵團(tuán)12師教育局網(wǎng)站淘寶一個(gè)關(guān)鍵詞要刷多久
  • wordpress自己寫(xiě)代碼百度自然排名優(yōu)化