Redis其他數(shù)據(jù)類型詳解

Redis其他數(shù)據(jù)類型

打開Xshell之后坞笙,如何打開6379筝尾?

[root@iZ2ze5s090y2d3q50krshoZ ~]# redis-cli -a 密碼

1痰驱、bitmap 位圖

help @string

GETBIT key offset
含義:對(duì) key 所儲(chǔ)存的字符串值哀卫,獲取指定偏移量上的位(bit)澜沟。
  summary: Returns the bit value at offset in the string value stored at key    
  since: 2.2.0
舉例:
# 對(duì)不存在的 key 或者不存在的 offset 進(jìn)行 GETBIT, 返回 0
127.0.0.1:6379> EXISTS bit
(integer) 0
127.0.0.1:6379> GETBIT bit 113
(integer) 0

# 對(duì)已存在的 offset 進(jìn)行 GETBIT
127.0.0.1:6379> SETBIT bit 113 1
(integer) 0
127.0.0.1:6379> GETBIT bit 113
(integer) 1

SETBIT key offset value
  summary: Sets or clears the bit at offset in the string value stored at key
  since: 2.2.0
  
含義:對(duì) key 所儲(chǔ)存的字符串值晋控,設(shè)置或清除指定偏移量上的位(bit)汞窗。
舉例:
redis> SETBIT bit 10086 1
(integer) 0

redis> GETBIT bit 10086
(integer) 1

redis> GETBIT bit 100   # bit 默認(rèn)被初始化為 0
(integer) 0
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
  summary: Perform arbitrary bitfield integer operations on strings
  since: 3.2.0

含義:對(duì)字符串執(zhí)行任意位于位域整數(shù)操作


BITCOUNT key [start end]
  summary: Count set bits in a string
  since: 2.6.0

含義:得到總數(shù)
舉例:
127.0.0.1:6379> SETBIT mykeys 10 1
(integer) 0
127.0.0.1:6379> SETBIT mykeys 11 1
(integer) 0
127.0.0.1:6379> SETBIT mykeys 21 1
(integer) 0
127.0.0.1:6379> SETBIT mykeys 10 2 
(integer) 0
127.0.0.1:6379> BITCOUNT mykeys
(integer) 4
 BITOP operation destkey key [key ...]
  summary: Perform bitwise operations between strings
  since: 2.6.0
含義:在字符串之間執(zhí)行位操作

公司記錄某個(gè)人一個(gè)月的打卡情況
一年365天怎么記錄一個(gè)人在某個(gè)網(wǎng)站的登錄,活躍情況

兩個(gè)狀態(tài)的都能用這種方法進(jìn)行性能壓榨

都是操作二進(jìn)制位來進(jìn)行記錄赡译,就只有0 和 1 兩個(gè)狀態(tài)仲吏!
365 天 = 365 bit 1字節(jié) = 8bit 46 個(gè)字節(jié)左右!
測(cè)試登錄次數(shù)
127.0.0.1:6379> setbit login 0 1
(integer) 0
127.0.0.1:6379> setbit login 3 1
(integer) 0
127.0.0.1:6379> bitcount login 0 -1
(integer) 2

周一:1 周二:0 周三:0 周四:1 ......
查看某一天是否有打卡!
統(tǒng)計(jì)操作裹唆,統(tǒng)計(jì) 打卡的天數(shù)誓斥!

2、Geospatial 地理位置

127.0.0.1:6379> help @geo

  GEOADD key longitude latitude member [longitude latitude member ...]
  summary: Add one or more geospatial items in the geospatial index represented using a sorted set
  since: 3.2.0

  GEODIST key member1 member2 [unit]
  summary: Returns the distance between two members of a geospatial index
  since: 3.2.0

  GEOHASH key member [member ...]
  summary: Returns members of a geospatial index as standard geohash strings
  since: 3.2.0

  GEOPOS key member [member ...]
  summary: Returns longitude and latitude of members of a geospatial index
  since: 3.2.0

/**初學(xué)者知道就行//
  GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
  summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point
  since: 3.2.0
  含義:查詢標(biāo)識(shí)地理空間索引的排序集许帐,以獲取與某一點(diǎn)的最大距離的成員

  GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
  summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member
  since: 3.2.0

朋友的定位劳坑,附近的人,打車距離計(jì)算成畦?
在Redis3.2 版本推出了Geospatial 距芬! 這個(gè)功能可以推算地理位置的信息,兩地之間的距離循帐。
可以查詢一些測(cè)試數(shù)據(jù):http://www.jsons.cn/lngcodeinfo/0706D99C19A781A3/

給定幾個(gè)城市的經(jīng)緯度:

太原:112.549248框仔,37.857014

北京:116.405285,39.904989

成都:104.065735拄养,30.659462

武漢:114.298572离斩,30.584355

西安: 108.948024,34.263161

洛陽(yáng):112.434468瘪匿,34.663041

getadd
# getadd 添加地理位置
# 規(guī)則:兩級(jí)無法直接添加跛梗,我們一般會(huì)下載城市數(shù)據(jù),直接通過java程序一次性導(dǎo)入棋弥!
# 有效的經(jīng)度從-180度到180度茄袖。
# 有效的緯度從-85.05112878度到85.05112878度。

# 當(dāng)坐標(biāo)位置超出上述指定范圍時(shí)嘁锯,該命令將會(huì)返回一個(gè)錯(cuò)誤。
# 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijing
(error) ERR invalid longitude,latitude pair 39.900000,116.400000
# 參數(shù) key 值()

#插入城市的經(jīng)緯度
127.0.0.1:6379> geoadd china:city 112.549284 37.857014 taiyuan
127.0.0.1:6379> geoadd china:city 116.405285 39.904989 beijing
127.0.0.1:6379> geoadd china:city 104.065735 30.659462 chengdu
127.0.0.1:6379> geoadd china:city 114.298572 30.584355 wuhan
127.0.0.1:6379> geoadd china:city 108.948024 34.263161 xian
127.0.0.1:6379> geoadd china:city 112.434468 34.663041 luoyang

# 獲取指定的城市的經(jīng)度和緯度聂薪!
127.0.0.1:6379> geopos china:city beijing
1) 1) "116.40528291463851929"
   2) "39.9049884229125027"
127.0.0.1:6379> geopos china:city beijing luoyang
1) 1) "116.40528291463851929"
   2) "39.9049884229125027"
2) 1) "112.43446558713912964"
   2) "34.6630405862934694"


#兩人之間的距離家乘!
#單位:
#m 表示單位為米。
#km 表示單位為千米藏澳。
#mi 表示單位為英里仁锯。
#ft 表示單位為英尺。
#georadius 以給定的經(jīng)緯度為中心翔悠, 找出某一半徑內(nèi)的元素
#我附近的人业崖? (獲得所有附近的人的地址,定位P畛睢)通過半徑來查詢双炕!
#獲得指定數(shù)量的人,200
#所有數(shù)據(jù)應(yīng)該都錄入:china:city 撮抓,才會(huì)讓結(jié)果更加請(qǐng)求妇斤!
#查詢太原到北京的距離
127.0.0.1:6379> geodist china:city beijing taiyuan
"404109.2735"
127.0.0.1:6379> geodist china:city beijing taiyuan km
"404.1093"

#找某個(gè)地點(diǎn)(微信定位)方圓1000km內(nèi)的城市,附近的朋友
127.0.0.1:6379> georadius china:city 110 32 500 km
1) "xian"
2) "luoyang"
3) "wuhan"


# 找出位于指定元素周圍的其他元素!
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "taiyuan"
2) "beijing"
3) "xian"
4) "luoyang"

# 查看地圖中全部的元素
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chengdu"
2) "xian"
3) "luoyang"
4) "wuhan"
5) "taiyuan"
6) "beijing"

# 移除指定元素站超!
127.0.0.1:6379> zrem china:city beijing 
(integer) 1

3荸恕、 Hyperloglog(基數(shù))

推薦一個(gè)博客:

關(guān)于這個(gè)算法的一個(gè)博客:http://www.reibang.com/p/55defda6dcd2

場(chǎng)景如網(wǎng)頁(yè)的 UV (一個(gè)人訪問一個(gè)網(wǎng)站多次,但是還是算作一個(gè)人K老唷)
通過使用一種特殊的算法融求,而達(dá)到使用一個(gè)固定空間達(dá)到統(tǒng)計(jì)基數(shù)的作用。
這種算法有誤差算撮,是一種概率學(xué)問題生宛。0.81% 錯(cuò)誤率! 但對(duì)于統(tǒng)計(jì)UV這類的任務(wù)钮惠,是可以忽略不計(jì)的茅糜!
測(cè)試使用
如果允許有誤差,那么一定可以使用 Hyperloglog 素挽!
如果不允許誤差蔑赘,就使用 set 或者自己的數(shù)據(jù)類型即可!

127.0.0.1:6379> help @hyperloglog

  PFADD key element [element ...]
  summary: Adds the specified elements to the specified HyperLogLog.
  since: 2.8.9

  PFCOUNT key [key ...]
  summary: Return the approximated cardinality of the set(s) observed by the HyperLogLog at key(s).
  since: 2.8.9

  PFMERGE destkey sourcekey [sourcekey ...]
  summary: Merge N different HyperLogLogs into a single one.
  since: 2.8.9

127.0.0.1:6379> pfadd pf a b c d e f g
(integer) 1
127.0.0.1:6379> pfadd pf2 c d e f g
(integer) 1
127.0.0.1:6379> pfcount pf pf2
(integer) 7
127.0.0.1:6379> pfmerge a pf pf2
OK
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末预明,一起剝皮案震驚了整個(gè)濱河市缩赛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撰糠,老刑警劉巖酥馍,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阅酪,居然都是意外死亡旨袒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門术辐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砚尽,“玉大人,你說我怎么就攤上這事辉词”毓拢” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵瑞躺,是天一觀的道長(zhǎng)敷搪。 經(jīng)常有香客問我,道長(zhǎng)幢哨,這世上最難降的妖魔是什么赡勘? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮捞镰,結(jié)果婚禮上狮含,老公的妹妹穿的比我還像新娘顽悼。我一直安慰自己,他們只是感情好几迄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布蔚龙。 她就那樣靜靜地躺著,像睡著了一般映胁。 火紅的嫁衣襯著肌膚如雪木羹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天解孙,我揣著相機(jī)與錄音坑填,去河邊找鬼。 笑死弛姜,一個(gè)胖子當(dāng)著我的面吹牛脐瑰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播廷臼,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼苍在,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了荠商?” 一聲冷哼從身側(cè)響起寂恬,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莱没,沒想到半個(gè)月后初肉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饰躲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年牙咏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘹裂。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妄壶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焦蘑,到底是詐尸還是另有隱情,我是刑警寧澤盒发,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布例嘱,位于F島的核電站,受9級(jí)特大地震影響宁舰,放射性物質(zhì)發(fā)生泄漏拼卵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一蛮艰、第九天 我趴在偏房一處隱蔽的房頂上張望腋腮。 院中可真熱鬧,春花似錦、人聲如沸即寡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)聪富。三九已至莺丑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間墩蔓,已是汗流浹背梢莽。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奸披,地道東北人昏名。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像阵面,于是被迫代替她去往敵國(guó)和親轻局。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356