一.string 類型數據的基本操作
1.添加/修改數據
set key value
2.獲取數據
get key
3.刪除數據
del key
4.添加/修改多個數據
mset key1 value1 key2 value2
5.獲取多個數據
mget key1 key2
二.list類型的基本操作
- 數據存儲需求:存儲多個數據,并對數據進入存儲的順序進行區分
- 需要的存儲結構:一個存儲空間保存多個數據,且通過數據可以體現進入順序
- list類型:保存多個數據,底層是用雙向鏈表的存儲結構實現的。
1.lpush/rpush key value1 [value2] …… :添加數據
可以看出我們先從左邊放入一個huawei,再從左邊放入一個apple,然后繼續向左邊放入一個microsoft,因此打印的順序是從左到右,即:microsoft,apple,huawei.
可以自行測試rpush和rpush、lpush的聯合使用。
2.lrange key start stop :獲取范圍數據
我們可以金桔list里面的索引來獲取數據,其中第一個數據的下標為0,和數組的編號方式一樣,但是不同的是,在list中最后一個元素的索引為-1,倒數第二個元素的編號為-2,因此在list中每個元素有兩個索引,從左到右從0開始編號,從右往左從-1開始編號。測試如下圖:
3.lindex key index:獲取index索引位置上的值?
4.llen key:獲取list中值的個數?
?5?lpop/rpop key:獲取并移除數據
list中最牛X的操作就是lpush/rpush配合lpop/rpop 來使用。
?三.set類型的基本操作
與List相比,Set集合中的元素不允許重復,一個集合中最多可以對應2^32-1(4294967295)個元素。
1. 基本命令
對我們來說,常用的Set命令有如下幾種
?2.插入操作
?3. 查詢操作
?4. 刪除操作
?四.zset類型的基本操作
1.常用命令
?2.示例
zadd <key><score1><value1><score2><value2>...
????????將一個或多個member元素及其score值加入到有序集key當中。
zrange <key><start><stop>[WITHSCORES]?
? ? ? ? 返回有序集key中,下標在<start><stop>之間的元素帶WITHSCORES,可以讓分數一起和值返回到結果集。
0到-1就是返回全部的元素,從小到大排列。
加上withsorces 可以附帶著分數返回
zrangebyscore key min max [withscores] [limit offset count]
? ? ? ? 返回有序集 key 中,所有score值介于min和max 之間(包括等于min或max )的成員。有序集成員按score值遞增(從小到大)次序排列。
zrevrangebyscore key max min [withscores] [limit offset count]
? ? ? ? 同上,改為從大到小排列。
zincrby <key><increment><value>
????????為元素的score加上增量
zrem <key><value>
????????刪除該集合下,指定值的元素v
zcount <key><min><max>
????????統計該集合,分數區間內的元素個數。
zrank <key><value>
????????返回該值在集合中的排名,從0開始。
五.hash類型的基本操作
1、往redis庫中插入一條hash類型的數據redis> hset key field value舉例:redis 127.0.0.1:6379> hset user001:zhangsan iphone 6(integer) 1redis 127.0.0.1:6379> hset user001:zhangsan xiaomi 7(integer) 1redis 127.0.0.1:6379> hset user001:zhangsan meizu 8(integer) 1在redis庫中就形成了這樣一條數據:
2、從redis庫中獲取一條hash類型數據的value取出一條hash類型數據中所有field-value對redis 127.0.0.1:6379> hgetall user001:zhangsan1) "iphone"2) "6"3) "xiaomi"4) "7"5) "meizu"6) "8"取出hash數據中所有fieldsredis 127.0.0.1:6379> hkeys user001:zhangsan1) "iphone"2) "xiaomi"3) "meizu"取出hash數據中所有的valueredis 127.0.0.1:6379> hvals user001:zhangsan1) "6"2) "7"3) "8"取出hash數據中一個指定field的值redis 127.0.0.1:6379> hget user001:zhangsan xiaomi"7"為hash數據中指定的一個field的值進行增減redis 127.0.0.1:6379> hincrby user001:zhangsan xiaomi 1(integer) 8從hash數據中刪除一個字段field及其值redis 127.0.0.1:6379> hgetall user001:zhangsan1) "iphone"2) "6"3) "xiaomi"4) "7"5) "meizu"6) "8"redis 127.0.0.1:6379> hdel user001:zhangsan iphone(integer) 1redis 127.0.0.1:6379> hgetall user001:zhangsan1) "xiaomi"2) "7"3) "meizu"4) "8"應用場景:購物車案例public class BuyCartServiceImpl {private Jedis jedis = null;@Beforepublic void init(){jedis = new Jedis("192.168.2.70",6379);}// 添加商品到購物車@Testpublic void testAddItemToCart(){jedis.hset("cart:user02", "小米沙發", "1");jedis.hset("cart:user02", "蘋果手機", "2");jedis.hset("cart:user02", "格力空調", "4");jedis.close();}// 遍歷購物車信息@Testpublic void testGetCartInfo(){Map<String, String> cart = jedis.hgetAll("cart:user02");Set<Entry<String, String>> entrySet = cart.entrySet();for(Entry<String, String> ent :entrySet){System.out.println(ent.getKey()+ ":" + ent.getValue());}jedis.close();}// 更改購物車@Testpublic void editCart(){//給蠟燭商品項的數量加1jedis.hincrBy("cart:user02", "小米沙發", 1);jedis.close();}// 從購物車中刪除商品項@Testpublic void delItemFromCart(){jedis.hdel("cart:user02", "蘋果手機");jedis.close();}}從上面可見,用redis做購物車簡直太方便了。
六.bitmaps類型的基本操作
1.bitmap概念
1:BitMap,即位圖,其實也就是 byte 數組,用二進制表示,只有 0 和 1 兩個數字。
2:bitmap并不是一種數據結構,實際上它就是字符串,但是可以對字符串的位進行操作。
3:bitmap有自己的一套命令。可以把bitmap想象成一個以bit為單位的數組,數組的每個單元存儲0和1,數組的下標叫做偏移量。
2.設置name = "@"
?3.設置name='A'
4.設置name='A@'
七.hyperloglog類型的基本操作
?1、hyperloglog 簡介
????????Redis 中 hyperloglog 數據類型是 2.8.9 版本引入的,是一種概率數據結構,用來估算數據的基數。基數就是指一個集合中不同值的數目,比如 a, b, c, d 的基數就是 4,a, b, c, d, a 的基數還是 4。雖然 a 出現了兩次,但是只會被計算一次。
?????????hyperloglog 通常用來統計一個集合中不重復的元素個數。一個很常見的例子就是統計某個文章的 UV(Unique Visitor,獨立訪客,一般可以理解為客戶端 IP)。精確的計算數據集的基數需要消耗大量的內存來存儲數據集。在遍歷數據集時,判斷當前遍歷值是否已經存在唯一方法就是將這個值與已經遍歷過的值進行一一對比。當數據集的數量越來越大,內存消耗就無法忽視,甚至成了問題的關鍵。
????????使用 Redis 統計集合的基數一般有三種方法,分別是使用 Redis 的 hashmap,bitmap 和 hyperloglog。前兩個數據結構在集合的數量級增長時,所消耗的內存會大大增加,但是 hyperloglog 則不會。
?2.hyperloglog 結構
1、hllhdr 定義
八.gepspatial類型的基本操作
1.geoadd 添加地理位置
# 規則:兩級無法直接添加,我們一般會下載城市數據,直接通過java程序一次性導入!
# 有效的經度從-180度到180度。
# 有效的緯度從-85.05112878度到85.05112878度。
# 當坐標位置超出上述指定范圍時,該命令將會返回一個錯誤,如:
127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin
(error) ERR invalid longitude,latitude pair 39.900000,116.400000 # 參數 key 值()
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqi 114.05 22.52 shengzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2
2.geopos 獲得當前坐標值
127.0.0.1:6379> GEOPOS china:city beijing # 獲取指定的城市的經度和緯度!
1) 1) "116.39999896287918091" 2) "39.90000009167092543"
127.0.0.1:6379> GEOPOS china:city beijing chongqi
1) 1) "116.39999896287918091" 2) "39.90000009167092543"
2) 1) "106.49999767541885376" 2) "29.52999957900659211"
3.geodist 返回兩地之間的距離
127.0.0.1:6379> GEODIST china:city beijing shanghai km # 查看上海到北京的直線距離
"1067.3788"
127.0.0.1:6379> GEODIST china:city beijing chongqi km # 查看重慶到北京的直線距離
"1464.0708"
4.georadius 以給定的經緯度為中心, 找出某一半徑內的元素
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km # 以110,30 這個經緯度為中心,尋找方圓1000km內的城市
1) "chongqi"
2) "xian"
3) "shengzhen"
4) "hangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist # 顯示到中間距離的位置
1) 1) "chongqi" 2) "341.9374"
2) 1) "xian" 2) "483.8340"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord # 顯示他人的定位信息
1) 1) "chongqi" 2) 1) "106.49999767541885376" 2) "29.52999957900659211"
2) 1) "xian" 2) 1) "108.96000176668167114" 2) "34.25999964418929977"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 1 # 篩選出指定數量的結果!
1) 1) "chongqi" 2) "341.9374" 3) 1) "106.49999767541885376" 2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqi" 2) "341.9374" 3) 1) "106.49999767541885376" 2) "29.52999957900659211"
2) 1) "xian" 2) "483.8340" 3) 1) "108.96000176668167114" 2) "34.25999964418929977"
5.georadiusbymember 找出位于指定元素周圍的其他元素
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "beijing"
2) "xian"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km
1) "hangzhou"
2) "shanghai"
6.geohash 返回元素的 Geohash
127.0.0.1:6379> geohash china:city beijing chongqi
1) "wx4fbxxfke0"
2) "wm5xzrybty0"
7.Geospatial 的其他操作 -查看,刪除
127.0.0.1:6379> ZRANGE china:city 0 -1 # 查看地圖中全部的元素
1) "chongqi"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> zrem china:city beijing # 移除指定元素!
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chongqi"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"