一、redis9種數(shù)據(jù)類型的基本操作
①key操作
#查找所有的key
127.0.0.1:6379> keys *
1) "pop"
2) "mylist"
3) "lpl"
4) "myset"
#設(shè)置key的過期時(shí)間 返回1表示執(zhí)行成功,0表示失敗,出現(xiàn)問題
127.0.0.1:6379> expire pop 30
(integer) 1
#ttl key 查看key過期倒計(jì)時(shí)
127.0.0.1:6379> ttl pop
(integer) 10
127.0.0.1:6379> ttl pop
(integer) 1
127.0.0.1:6379> ttl pop
(integer) -2
#查看是否存在key:exists key,返回0表示不存在
127.0.0.1:6379> exists pop
(integer) 0
#del key:刪除key
127.0.0.1:6379> del lpl
(integer) 1
127.0.0.1:6379> keys *
1) "mylist"
2) "myset"
#rename key 表示修改key的名稱
②String類型
(1)Redis 最基本的數(shù)據(jù)類型,String 類型的值最大能存儲(chǔ) 512MB。
(2)string類型是二進(jìn)制, redis 的 string 可以包含任何數(shù)據(jù),一個(gè) key 對(duì)應(yīng)一個(gè) value。
#set key value 創(chuàng)建key并賦值
127.0.0.1:6379> set pop qwe
OK
#get key 獲取key的對(duì)應(yīng)值
127.0.0.1:6379> get pop
"qwe"
③list類型
Redis列表是簡(jiǎn)單的字符串列表,按照插入順序排序。一個(gè)列表最多可以包含 232 - 1 個(gè)元素 (4294967295, 每個(gè)列表超過40億個(gè)元素)。
#lpush key element 表示從key左邊開始插入一個(gè)或多個(gè)值
127.0.0.1:6379> lpush lpl 1 2 3 4
(integer) 4
# lrange key start stop 表示列表的范圍從start的位置到stop的位置
127.0.0.1:6379> lrange lpl 1 3
1) "3"
2) "2"
3) "1"
#從rpush key element 從key右邊插入
127.0.0.1:6379> rpush lpl 6 7 8
(integer) 7
#lrange key 0 -1 查看列表全部的值
127.0.0.1:6379> lrange lpl 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "6"
6) "7"
7) "8"
#rpop key 移除列表的最后一個(gè)元素,返回值為移除的元素
127.0.0.1:6379> rpop lpl
"8"
127.0.0.1:6379> lrange lpl 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "6"
6) "7"
#lpop key 移出并獲取列表的第一個(gè)元素
127.0.0.1:6379> lpop lpl
"4"
127.0.0.1:6379> lrange lpl 0 -1
1) "3"
2) "2"
3) "1"
4) "6"
5) "7"
④Set類型
Redis 的 Set 是 String 類型的無序集合。集合中成員是唯一的,不能出現(xiàn)重復(fù)的數(shù)據(jù)。
tips:Redis 中集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是 O(1)。 集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
# sadd key member [member ...] 添加集合的元素
127.0.0.1:6379> sadd course redis mongodb mysql
(integer) 3
#scard key 獲取集合中的成員數(shù)
127.0.0.1:6379> scard course
(integer) 3
#smembers key 返回集合中的所有成員
127.0.0.1:6379> smembers course
1) "redis"
2) "mongodb"
3) "mysql"
⑤Zset
Redis 有序集合和集合一樣也是string類型元素的集合且不允許重復(fù)的成員。不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序。有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
#zadd key score member 向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù)
127.0.0.1:6379> zadd courses 1 redis
(integer) 1
#zrevrank key 返回有序集合中指定成員的排名,有序集成員按分?jǐn)?shù)值遞減(從大到小)排序
127.0.0.1:6379> zrevrank courses mongodb
(integer) 3
#zrange key start stop withscores通過索引區(qū)間返回有序集合指定區(qū)間內(nèi)的成員
127.0.0.1:6379> zrange courses 0 10 withscores
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "sqlserver"
6) "68"
7) "oracle"
8) "77"
9) "mysql"
10) "99"
⑥Hash
Redis hash 是一個(gè) string 類型的 field 和 value 的映射表,hash 特別適合用于存儲(chǔ)對(duì)象。
#hmset key field value [field value ...] 將哈希表 key 中的字段 field 的值設(shè)為 value
127.0.0.1:6379> hmset new name "zhangsan" age 18 gender "F" birth 2000-01-01
OK
#hgetall key 獲取在哈希表中指定 key 的所有字段和值
127.0.0.1:6379> hgetall new
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "gender"
6) "F"
7) "birth"
8) "2000-01-01"
⑦Bitmaps
1)Bitmaps本身不是一種數(shù)據(jù)類型,實(shí)際上它就是字符串(key-value),但是它可以對(duì)字符串的位進(jìn)行操作。
2)Bitmaps單獨(dú)提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一個(gè)以位為單位的數(shù)組, 數(shù)組的每個(gè)單元只能存儲(chǔ)0和1, 數(shù)組的下標(biāo)在Bitmaps中叫做偏移量。
#setbit key offset value 設(shè)置Bitmaps中某個(gè)偏移量的值(0或1),offset偏移量從0開始。模擬工作日打卡場(chǎng)景
# bitcount key [start end [BYTE|BIT]] 用于統(tǒng)計(jì)字符串從start字節(jié)到end字節(jié)比特值為1的數(shù)量
127.0.0.1:6379> bitcount user:01
(integer) 3
#getbit key offset 獲取鍵的第offset位的值(從0開始算)
127.0.0.1:6379> getbit user:01 5
(integer) 1
⑧HyperLogLog
優(yōu)點(diǎn):
(1)能夠降低一定的精度來平衡存儲(chǔ)空間
(2)在輸入元素的數(shù)量或者體積非常非常大時(shí),計(jì)算基數(shù)所需的空間總是固定的、并且是很小的。
(3)在 Redis 里面,每個(gè) HyperLogLog 鍵只需要花費(fèi) 12 KB 內(nèi)存,就可以計(jì)算接近 2^64 個(gè)不同元素的基數(shù)。
缺點(diǎn):
由于HyperLogLog 只會(huì)根據(jù)輸入元素來計(jì)算基數(shù),而不會(huì)儲(chǔ)存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個(gè)元素。文章來源:http://www.zghlxwxcb.cn/news/detail-608037.html
#pfadd key [element [element ...]] 添加指定元素到 HyperLogLog 中
127.0.0.1:6379> pfadd test "redis"
(integer) 1
127.0.0.1:6379> pfadd test "mongodb"
(integer) 1
127.0.0.1:6379> pfadd test "mysql"
(integer) 1
#pfcount key [key ...] 返回給定 HyperLogLog 的基數(shù)估算值
127.0.0.1:6379> pfcount test
(integer) 3
127.0.0.1:6379> pfadd test1 "sqlserver"
(integer) 1
#pfmerge destkey sourcekey [sourcekey ...] 將多個(gè) HyperLogLog 合并為一個(gè) HyperLogLog
127.0.0.1:6379> pfmerge test test1
OK
127.0.0.1:6379> pfcount test
(integer)
⑨Geospatial
GEO類型,就是元素的2維坐標(biāo),在地圖上就是經(jīng)緯度。redis基于該類型,提供了經(jīng)緯度設(shè)置,查詢,范圍查詢,距離查詢,經(jīng)緯度Hash等常見操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-608037.html
# geoadd key longitude latitude member [longitude latitude member...] 添加地理位置(經(jīng)度,緯度,名稱)
127.0.0.1:6379> geoadd location 127.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd location 106.50 29.53 chongqing
(integer) 1
#geopos key member [member...] 獲得指定地區(qū)的坐標(biāo)值
127.0.0.1:6379> geopos location shanghai
1) 1) "127.47000128030776978"
2) "31.22999903975783553"
#geodist key member1 member2 [m\|km\|ft\|mi] 獲取兩個(gè)位置之間的直線距離
127.0.0.1:6379> geodist location shanghai chongqing km
"2017.9802"
#georadius key longitude latitude radius [m\|km\|ft\|mi] 以給定的經(jīng)緯度為中心,找出某一半徑內(nèi)的元素
127.0.0.1:6379> georadius location 110 30 1000 km
1) "chongqing"
到了這里,關(guān)于Redis 九種數(shù)據(jù)類型的基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!