2 Redis基本知识
文章目錄
- 1 基本知識
- 1.1 select 切換數(shù)據(jù)庫
- 1.2 dbsize 查看當(dāng)前數(shù)據(jù)庫key的數(shù)量
- 1.3 flushdb 清空當(dāng)前庫
- 1.4 flushall 清空全部庫(16個庫)
- 1.5 端口6379由來
- 1.6 統(tǒng)一密碼管理
- 1.7 單線程+多路IO復(fù)用
- 2 redis鍵(key)
- 2.1 keys * 查看當(dāng)前庫所有key(匹配:keys *1 )
- 2.2 exists key 查看庫中是否存在key
- 2.3 type key 查看制定key的類型
- 2.4 del 刪除key數(shù)據(jù)
- 2.5 unlink key 根據(jù)value選擇非阻塞刪除
- 2.6 expire key 10 為指定的key設(shè)置過期時間
- 2.7 ttl key 查看還有多少秒過期
- 3 Redis字符串
- 3.1 set 添加值
- 3.2 get 添加值
- 3.3 append 追加值
- 3.4 strlen 獲取值得長度
- 3.5 setnx 互斥設(shè)置值
- 3.6 incr 將key中存儲的值增加1
- 3.7 decr 將key中存儲的值減1
- 3.8 incrby 將key中的值步長增加指定的值
- 3.9 decrby 將key中的值步長減少指定的值
- 3.10 mset 同時設(shè)置多個鍵值對
- 3.11 mget 同時獲取多個鍵值對
- 3.12 msetnx 同時互斥設(shè)置多個鍵值對
- 3.13 getrange 獲取值得范圍
- 3.14 setrange 設(shè)置值所存儲的字符串
- 3.15 setex 設(shè)置鍵值的同時設(shè)置過期時間秒
- 3.16 getset 以新值替換舊值
- 3.17 String的數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 4 Redis 列表List
- 4.1 lpush 從左邊插入一個或多個值
- 4.2 lrange 從左邊取出一個或多個值
- 4.3 rpush 從右邊插入一個或多個值
- 4.4 lpop 從左邊吐出一個值
- 4.5 rpop 從右邊吐出一個值
- 4.6 rpoplpush 從k1列表右邊吐出一個值插入到k2列表左邊
- 4.7 lindex 按照索引下標(biāo)獲得元素(從左到右)
- 4.8 llen 獲得列表的長度
- 4.9 linsert 在值得后面插入值
- 4.10 lrem 刪除list中的指定元素
- 4.11 lset 將列表下標(biāo)index的值替換成value
- 4.12 List的數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 5 Redis 集合Set
- 5.1 sadd 添加元素
- 5.2 smembers 取出集合中的元素
- 5.3 sismenber 判斷集合中是否存在元素
- 5.4 scard 返回集合中的元素個數(shù)
- 5.5 srem 刪除集合中的指定元素
- 5.6 spop 隨機(jī)從集合中取出一個值
- 5.7 srandmember 隨機(jī)從集合中取出n個值,不會從集合中刪除
- 5.8 smove 將集合中的元素移動到另一個集合中
- 5.9 sinter 取出集合中的交集
- 5.10 sunion 取出集合中的并集
- 5.11 sdiff 取出集合的差集
- 5.12 Set集合數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 6 Redis哈希(Hash)
- 6.1 hset 向hash中添加值
- 6.2 hget 從hash中取出值
- 6.3 hmset 批量設(shè)置hash值
- 6.4 hexists 查看哈希表key中,給定域field是否存在
- 6.5 hkeys 列出該hash集合的所有filed
- 6.6 hvals 列出該hash集合的所有value
- 6.7 hincrby 為哈希表key中的域field 的值加上增量1
- 6.8 hsetnx 將哈希表中key中的域field的值設(shè)置為value,當(dāng)且僅當(dāng)域field不存在
- 6.9 Hash數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 7 Redis有序集合Zset(sorted set)
- 7.1 zadd 添加元素
- 7.2 zrange 取出元素
- 7.3 zrangebyscore 取出范圍內(nèi)的值
- 7.4 zrevrangebyscore 倒序取出范圍元素
- 7.5 zincrby 為元素的score加上增量
- 7.6 zrem 刪除元素
- 7.7 zconut 統(tǒng)計該集合分?jǐn)?shù)區(qū)間下的元素個數(shù)
- 7.8 zrank 返回集合中的排名
- 7.9 Zset 數(shù)據(jù)結(jié)構(gòu)總結(jié)
1 基本知識
1.1 select 切換數(shù)據(jù)庫
默認(rèn)16個數(shù)據(jù)庫,下標(biāo)從0開始,使用select 15 切換到15號數(shù)據(jù)庫
[chengwen@localhost redis]$ redis-server /etc/redis.conf [chengwen@localhost redis]$ redis-cli 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> select 15 OK 127.0.0.1:6379[15]> select 0 OK 127.0.0.1:6379>1.2 dbsize 查看當(dāng)前數(shù)據(jù)庫key的數(shù)量
查看當(dāng)前數(shù)據(jù)庫key的數(shù)量
127.0.0.1:6379> dbsize (integer) 0 127.0.0.1:6379>1.3 flushdb 清空當(dāng)前庫
清空當(dāng)前庫
127.0.0.1:6379> flushdb OK 127.0.0.1:6379>1.4 flushall 清空全部庫(16個庫)
清空全部庫(16個庫)
127.0.0.1:6379> flushall OK 127.0.0.1:6379>1.5 端口6379由來
Alessia Merz 女明星的名字Merz 四個字母對應(yīng)手機(jī)鍵盤上面的數(shù)字而來。
1.6 統(tǒng)一密碼管理
所有庫同樣密碼
1.7 單線程+多路IO復(fù)用
多路復(fù)用是指使用一個線程來檢查多個文件描述符(Socket)的就緒狀態(tài),比如調(diào)用select和poll函數(shù),傳入多個文件描述符,如果有一個文件描述符就緒,就返回。否則阻塞直到超時。得到就緒狀態(tài)后進(jìn)行真正的操作可以在同一個線程里執(zhí)行,也可以啟動線程執(zhí)行(比如使用線程池)
串行 vs 多線程+鎖(memcache) vs 單線程+多路IO復(fù)用(redis)
與Memcache三點不同:支持多數(shù)據(jù)類型,支持持久化,單線程+多路IO復(fù)用
2 redis鍵(key)
redis鍵(key)
2.1 keys * 查看當(dāng)前庫所有key(匹配:keys *1 )
127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> set k1 lucy OK 127.0.0.1:6379> set k2 mary OK 127.0.0.1:6379> set k3 jack OK 127.0.0.1:6379> keys * 1) "k2" 2) "k3" 3) "k1" 127.0.0.1:6379>2.2 exists key 查看庫中是否存在key
存在返回值1 ,不存在返回值0
127.0.0.1:6379> exists k1 (integer) 1 127.0.0.1:6379> exists k4 (integer) 0 127.0.0.1:6379>2.3 type key 查看制定key的類型
127.0.0.1:6379> type k2 string 127.0.0.1:6379>2.4 del 刪除key數(shù)據(jù)
127.0.0.1:6379> del k3 (integer) 1 127.0.0.1:6379> keys * 1) "k2" 2) "k1" 127.0.0.1:6379>2.5 unlink key 根據(jù)value選擇非阻塞刪除
僅將keys 從keyspace 元數(shù)據(jù)中刪除,真正的刪除會再后續(xù)異步操作。
127.0.0.1:6379> set k3 zhoumin OK 127.0.0.1:6379> keys * 1) "k2" 2) "k3" 3) "k1" 127.0.0.1:6379> get k3 "zhoumin" 127.0.0.1:6379> unlink key k3 (integer) 1 127.0.0.1:6379> keys * 1) "k2" 2) "k1" 127.0.0.1:6379>2.6 expire key 10 為指定的key設(shè)置過期時間
127.0.0.1:6379> expire k1 10 (integer) 1 127.0.0.1:6379> ttl k1 (integer) -2 127.0.0.1:6379> ttl k2 (integer) -1 127.0.0.1:6379>2.7 ttl key 查看還有多少秒過期
-1 表示永不過期
-2 表示已過期
1 表示未過期
3 Redis字符串
String 是redis 最基本的數(shù)據(jù)類型,可以理解為與memcache 一模一樣的類型,一個key對應(yīng)一個value
String類型是二進(jìn)制安全的。意味著redis 的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對象。
String類型是redis 最基本的數(shù)據(jù)類型,一個redis 中字符串value最多可以是512M
3.1 set 添加值
[chengwen@localhost redis]$ redis-server /etc/redis.conf [chengwen@localhost redis]$ redis-cli 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> set k1 v100 OK 127.0.0.1:6379> set k2 v200 OK 127.0.0.1:6379> keys * 1) "k1" 2) "k2" 127.0.0.1:6379> get k1 "v100" 127.0.0.1:6379> set k1 v1100 OK 127.0.0.1:6379> get k1 "v1100" 127.0.0.1:6379>3.2 get 添加值
127.0.0.1:6379> set k1 v1100 OK 127.0.0.1:6379> get k1 "v1100" 127.0.0.1:6379>3.3 append 追加值
127.0.0.1:6379> set k1 v1100 OK 127.0.0.1:6379> get k1 "v1100" 127.0.0.1:6379> append k1 zhoumin (integer) 12 127.0.0.1:6379> get k1 "v1100zhoumin" 127.0.0.1:6379>3.4 strlen 獲取值得長度
127.0.0.1:6379> strlen k1 (integer) 12 127.0.0.1:6379>3.5 setnx 互斥設(shè)置值
如果已經(jīng)存在key則不設(shè)置,返回0表示未設(shè)置成功。
127.0.0.1:6379> setnx k1 zhoumin (integer) 0 127.0.0.1:6379> get k1 "v1100zhoumin" 127.0.0.1:6379>如果不存在才能設(shè)置成功,返回1
127.0.0.1:6379> setnx k3 v300 (integer) 1 127.0.0.1:6379> get k3 "v300" 127.0.0.1:6379>3.6 incr 將key中存儲的值增加1
只能對數(shù)字值操作,如果為空,新增值為1
127.0.0.1:6379> set k4 400 OK 127.0.0.1:6379> incr k4 (integer) 401 127.0.0.1:6379> get k4 "401" 127.0.0.1:6379>3.7 decr 將key中存儲的值減1
只能對數(shù)字值操作,如果為空,新增值為-1
127.0.0.1:6379> set k4 400 OK 127.0.0.1:6379> incr k4 (integer) 401 127.0.0.1:6379> get k4 "401" 127.0.0.1:6379> decr k4 (integer) 400 127.0.0.1:6379>3.8 incrby 將key中的值步長增加指定的值
127.0.0.1:6379> incrby k4 10 (integer) 410 127.0.0.1:6379> get k4 "410"3.9 decrby 將key中的值步長減少指定的值
127.0.0.1:6379> decrby k4 20 (integer) 390 127.0.0.1:6379> get k4 "390" 127.0.0.1:6379>3.10 mset 同時設(shè)置多個鍵值對
[chengwen@localhost redis]$ redis-server /etc/redis.conf [chengwen@localhost redis]$ redis-cli 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> keys * 1) "k3" 2) "k2" 3) "k1" 127.0.0.1:6379>3.11 mget 同時獲取多個鍵值對
127.0.0.1:6379> mget k1 k2 k3 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379>3.12 msetnx 同時互斥設(shè)置多個鍵值對
同時設(shè)置多個值,如果其中一個已經(jīng)存在都不能設(shè)置成功,返回值 0
127.0.0.1:6379> msetnx k11 v11 k12 v12 k1 v11 (integer) 0 127.0.0.1:6379>如果同時設(shè)置的key值在庫中都不存在則設(shè)置成功,返回值 1
127.0.0.1:6379> msetnx k11 v11 k12 v12 k13 v13 (integer) 1 127.0.0.1:6379>3.13 getrange 獲取值得范圍
相當(dāng)于java中的substring [前包,后包]
127.0.0.1:6379> set name zhoumin OK 127.0.0.1:6379> getrange name 0 3 "zhou" 127.0.0.1:6379>3.14 setrange 設(shè)置值所存儲的字符串
覆蓋索引開始之后的值
127.0.0.1:6379> setrange name 4 xiao (integer) 8 127.0.0.1:6379> get name "zhouxiao" 127.0.0.1:6379>3.15 setex 設(shè)置鍵值的同時設(shè)置過期時間秒
127.0.0.1:6379> setex age 20 value30 OK 127.0.0.1:6379> ttl age (integer) 14 127.0.0.1:6379> ttl age (integer) 12 127.0.0.1:6379> ttl age (integer) 11 127.0.0.1:6379> ttl age (integer) 10 127.0.0.1:6379>3.16 getset 以新值替換舊值
getset
127.0.0.1:6379> getset name zhoumin "zhouxiao" 127.0.0.1:6379> get name "zhoumin" 127.0.0.1:6379>3.17 String的數(shù)據(jù)結(jié)構(gòu)總結(jié)
String 的數(shù)據(jù)結(jié)構(gòu)為簡單動態(tài)字符串。是可以修改的字符串,內(nèi)部結(jié)構(gòu)實現(xiàn)上類似于java的arraylist,采用預(yù)分配冗余空間的方式來減少內(nèi)存的頻繁分配。
4 Redis 列表List
單鍵多值
Redis 列表是簡單的字符串列表,按照插入順序排列,可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
它的底層實際是個雙向鏈表,對兩端的操作性能很高,通過索引下標(biāo)的操作中間的節(jié)點性能會較差。
4.1 lpush 從左邊插入一個或多個值
127.0.0.1:6379> lpush k1 v1 v2 v3 (integer) 34.2 lrange 從左邊取出一個或多個值
lrange
按照索引下標(biāo)獲得元素(從左到右)
4.3 rpush 從右邊插入一個或多個值
127.0.0.1:6379> rpush k2 v1 v2 v3 (integer) 3 127.0.0.1:6379> lrange k2 0 -1 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379>4.4 lpop 從左邊吐出一個值
值在健在,值光鍵亡
127.0.0.1:6379> lpop k1 "v3" 127.0.0.1:6379> lrange k1 0 -1 1) "v2" 2) "v1" 127.0.0.1:6379>4.5 rpop 從右邊吐出一個值
值在健在,值光鍵亡
127.0.0.1:6379> rpop k1 "v1" 127.0.0.1:6379> lrange k1 0 -1 1) "v2" 127.0.0.1:6379>4.6 rpoplpush 從k1列表右邊吐出一個值插入到k2列表左邊
127.0.0.1:6379> lrange k1 0 -1 1) "v2" 127.0.0.1:6379> lrange k2 0 -1 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379> rpoplpush k1 k2 "v2" 127.0.0.1:6379> lrange k2 0 -1 1) "v2" 2) "v1" 3) "v2" 4) "v3" 127.0.0.1:6379>4.7 lindex 按照索引下標(biāo)獲得元素(從左到右)
lindex
127.0.0.1:6379> lrange k2 0 -1 1) "v2" 2) "v1" 3) "v2" 4) "v3" 127.0.0.1:6379> lindex k2 0 "v2" 127.0.0.1:6379> lindex k2 1 "v1" 127.0.0.1:6379>4.8 llen 獲得列表的長度
127.0.0.1:6379> llen k2 (integer) 4 127.0.0.1:6379>4.9 linsert 在值得后面插入值
linsert before
在value的前面插入newvalue的值
linsert after
在value的后面插入newvalue的值
4.10 lrem 刪除list中的指定元素
lrem
從左到右刪除n個指定的元素
4.11 lset 將列表下標(biāo)index的值替換成value
lset
下標(biāo)從0開始,將下標(biāo)為1的值替換為zhoumin
4.12 List的數(shù)據(jù)結(jié)構(gòu)總結(jié)
List的數(shù)據(jù)結(jié)構(gòu)為快速鏈表quickList
首先在列表元素較少的情況下會使用一塊連續(xù)的內(nèi)存存儲,這個結(jié)構(gòu)是ziplist,也即是壓縮列表。
它將所有的元素挨在一起存儲,分配的是一塊連續(xù)的內(nèi)存。
當(dāng)數(shù)據(jù)量比較多的時候才會改成quicklist。
因為普通的鏈表需要的附加指針空間太大,會比較浪費(fèi)空間。比如這個列表里存的只是int類型的數(shù)據(jù),結(jié)構(gòu)上還需要兩個額外的指針prev和next。
Redis將鏈表和ziplist結(jié)合起來組成了quicklist。也就是將多個ziplist使用雙向指針串起來使用。這樣既滿足了快速插入刪除性能,又不會出現(xiàn)太大的空間冗余。
5 Redis 集合Set
Redis set 對外提供的功能與list類似是一個列表的功能,特殊之處在于set是可以自動排重的,當(dāng)你需要存儲一個列表數(shù)據(jù),又不希望出現(xiàn)重復(fù)數(shù)據(jù)時,set 是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合內(nèi)的重要接口,這個也是list所不能提供的。
Redis 的set 是string類型的無序集合。它底層其實是一個value為null的hash表,所以添加,刪除,查找的復(fù)雜度都是O(1).
一個算法,隨著數(shù)據(jù)的增加,執(zhí)行時間的長短,如果是O(1),數(shù)據(jù)增加,查找數(shù)據(jù)的時間不變。
5.1 sadd 添加元素
127.0.0.1:6379> sadd k1 v1 v2 v3 (integer) 3 127.0.0.1:6379> smembers k1 1) "v2" 2) "v1" 3) "v3"5.2 smembers 取出集合中的元素
127.0.0.1:6379> smembers k1 1) "v2" 2) "v1" 3) "v3"5.3 sismenber 判斷集合中是否存在元素
sismember
存在返回1
不存在返回0
5.4 scard 返回集合中的元素個數(shù)
127.0.0.1:6379> scard k1 (integer) 3 127.0.0.1:6379>5.5 srem 刪除集合中的指定元素
127.0.0.1:6379> srem k1 v1 v2 (integer) 2 127.0.0.1:6379> smembers k1 1) "v3" 127.0.0.1:6379>5.6 spop 隨機(jī)從集合中取出一個值
元素即value全部取出之后則key也隨即消失
127.0.0.1:6379> smembers k1 1) "v3" 127.0.0.1:6379> spop k1 1 1) "v3" 127.0.0.1:6379>5.7 srandmember 隨機(jī)從集合中取出n個值,不會從集合中刪除
127.0.0.1:6379> smembers k1 1) "v2" 2) "v1" 3) "v3" 127.0.0.1:6379> srandmember k1 2 1) "v1" 2) "v3" 127.0.0.1:6379> srandmember k1 2 1) "v1" 2) "v2" 127.0.0.1:6379>5.8 smove 將集合中的元素移動到另一個集合中
如果存在相同元素則源集合中元素消失,目標(biāo)集合中元素不增加,體現(xiàn)set集合的唯一性,不存在重復(fù)元素,否則可以移動成功。
127.0.0.1:6379> sadd k2 v3 v4 v5 (integer) 3 127.0.0.1:6379> sadd k1 v1 v2 v3 (integer) 3 127.0.0.1:6379> smove k1 k2 v3 (integer) 1 127.0.0.1:6379> smembers k1 1) "v2" 2) "v1" 127.0.0.1:6379> smembers k2 1) "v5" 2) "v4" 3) "v3" 127.0.0.1:6379>5.9 sinter 取出集合中的交集
127.0.0.1:6379> smembers k2 1) "v5" 2) "v4" 3) "v3" 127.0.0.1:6379> sadd k3 v4 v5 v6 (integer) 3 127.0.0.1:6379> smembers k3 1) "v5" 2) "v6" 3) "v4" 127.0.0.1:6379> sinter k2 k3 1) "v5" 2) "v4" 127.0.0.1:6379>5.10 sunion 取出集合中的并集
127.0.0.1:6379> sunion k2 k3 1) "v5" 2) "v6" 3) "v3" 4) "v4" 127.0.0.1:6379>5.11 sdiff 取出集合的差集
sdiff 返回兩個集合的差集元素(key1中的,不包含key2中的)
127.0.0.1:6379> smembers k2 1) "v5" 2) "v4" 3) "v3" 127.0.0.1:6379> smembers k3 1) "v5" 2) "v6" 3) "v4" 127.0.0.1:6379> sdiff k2 k3 1) "v3" 127.0.0.1:6379>5.12 Set集合數(shù)據(jù)結(jié)構(gòu)總結(jié)
Set 數(shù)據(jù)結(jié)構(gòu)是dict 字典,字典是用哈希表實現(xiàn)的。
java中的HashSet的內(nèi)部實現(xiàn)使用的是HashMap,只不過所有的value 都指向同一個對象。
Redis的set結(jié)構(gòu)也是一樣,它的內(nèi)部也使用hash結(jié)構(gòu),所有的value都指向同一個內(nèi)部結(jié)構(gòu)。
6 Redis哈希(Hash)
Redis hash 是一個鍵值對集合
Redis hash 是一個string 類型的field 和value 的映射表,hash特別適合用于存儲對象。
類似Java里面的Map<String,Object>
用戶id為查找的key,存儲的value 用戶對象包含姓名、年齡、生日等信息,如果用普通的key/value結(jié)構(gòu)來存儲
6.1 hset 向hash中添加值
hset
給 集合中的 鍵賦值
6.2 hget 從hash中取出值
hget
從集合取出value
6.3 hmset 批量設(shè)置hash值
127.0.0.1:6379> hmset user:1002 id 2 name zhangsan age 30 OK 127.0.0.1:6379>6.4 hexists 查看哈希表key中,給定域field是否存在
返回 1 表示存在
127.0.0.1:6379> hexists user:1001 name (integer) 1 127.0.0.1:6379>6.5 hkeys 列出該hash集合的所有filed
127.0.0.1:6379> hkeys user:1002 1) "id" 2) "name" 3) "age" 127.0.0.1:6379>6.6 hvals 列出該hash集合的所有value
127.0.0.1:6379> hvals user:1002 1) "2" 2) "zhangsan" 3) "30" 127.0.0.1:6379>6.7 hincrby 為哈希表key中的域field 的值加上增量1
127.0.0.1:6379> hincrby user:1002 age 2 (integer) 32 127.0.0.1:6379>6.8 hsetnx 將哈希表中key中的域field的值設(shè)置為value,當(dāng)且僅當(dāng)域field不存在
127.0.0.1:6379> hsetnx user:1002 age 35 (integer) 0 127.0.0.1:6379> hsetnx user:1002 gender 1 (integer) 1 127.0.0.1:6379> hkeys user:1002 1) "id" 2) "name" 3) "age" 4) "gender" 127.0.0.1:6379> hvals user:1002 1) "2" 2) "zhangsan" 3) "32" 4) "1" 127.0.0.1:6379>6.9 Hash數(shù)據(jù)結(jié)構(gòu)總結(jié)
Hash類型對應(yīng)的數(shù)據(jù)結(jié)構(gòu)是兩種:ziplist壓縮列表,hashtable(哈希表)。當(dāng)field-value 長度較短且個數(shù)較少時,使用ziplist,否則使用hashtable。
7 Redis有序集合Zset(sorted set)
Redis 有序集合zset 與普通集合set非常相似,是一個沒有重復(fù)元素的字符串集合。
不同之處是有序集合的每個成員都關(guān)聯(lián)了一個評分(score),這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重復(fù)的。
因為元素是有序的,所以你也可以很快的根據(jù)句評分(score)或者次序(position)來獲取一個范圍的元素。
訪問有序集合的中間元素也是非常快的,因此你能夠使用有序集合作為一個沒有重復(fù)成員的智能列表。
7.1 zadd 添加元素
將一個或多個member元素及score值加入到有序集key當(dāng)中。
[chengwen@localhost redis]$ redis-server /etc/redis.conf [chengwen@localhost redis]$ redis-cli 127.0.0.1:6379> zadd topn 200 java 300 c++ 400 mysql 500 php (integer) 47.2 zrange 取出元素
取出元素不帶評分scores
127.0.0.1:6379> zrange topn 0 -1 1) "java" 2) "c++" 3) "mysql" 4) "php" 127.0.0.1:6379>取出元素帶評分scores
127.0.0.1:6379> zrange topn 0 -1 withscores 1) "java" 2) "200" 3) "c++" 4) "300" 5) "mysql" 6) "400" 7) "php" 8) "500" 127.0.0.1:6379>7.3 zrangebyscore 取出范圍內(nèi)的值
127.0.0.1:6379> zrangebyscore topn 300 500 1) "c++" 2) "mysql" 3) "php" 127.0.0.1:6379>帶評分的取出范圍內(nèi)的值
127.0.0.1:6379> zrangebyscore topn 300 500 withscores 1) "c++" 2) "300" 3) "mysql" 4) "400" 5) "php" 6) "500" 127.0.0.1:6379>7.4 zrevrangebyscore 倒序取出范圍元素
127.0.0.1:6379> zrevrangebyscore topn 500 200 1) "php" 2) "mysql" 3) "c++" 4) "java" 127.0.0.1:6379>帶評分的倒序取出范圍內(nèi)的值
127.0.0.1:6379> zrevrangebyscore topn 500 200 withscores 1) "php" 2) "500" 3) "mysql" 4) "400" 5) "c++" 6) "300" 7) "java" 8) "200" 127.0.0.1:6379>7.5 zincrby 為元素的score加上增量
zincrby
increment 步長即增加多少
127.0.0.1:6379> zincrby topn 50 java "250" 127.0.0.1:6379> zrevrangebyscore topn 500 200 withscores 1) "php" 2) "500" 3) "mysql" 4) "400" 5) "c++" 6) "300" 7) "java" 8) "250" 127.0.0.1:6379>7.6 zrem 刪除元素
127.0.0.1:6379> zrem topn php (integer) 1 127.0.0.1:6379>7.7 zconut 統(tǒng)計該集合分?jǐn)?shù)區(qū)間下的元素個數(shù)
127.0.0.1:6379> zcount topn 200 300 (integer) 2 127.0.0.1:6379>7.8 zrank 返回集合中的排名
127.0.0.1:6379> zrank topn java (integer) 0 127.0.0.1:6379> zrange topn 0 -1 1) "java" 2) "c++" 3) "mysql" 127.0.0.1:6379> zrange topn 0 -1 withscores 1) "java" 2) "250" 3) "c++" 4) "300" 5) "mysql" 6) "400" 127.0.0.1:6379> zrank topn mysql (integer) 2 127.0.0.1:6379>7.9 Zset 數(shù)據(jù)結(jié)構(gòu)總結(jié)
zset底層使用了兩個數(shù)據(jù)結(jié)構(gòu)
1)hash,hash的作用就是關(guān)聯(lián)元素value和權(quán)重score,保障元素value的唯一性,可以通過元素value找到相應(yīng)的score值。
2)跳躍表,跳躍表的目的在于給元素value排序,根據(jù)score的范圍獲取元素列表
文章目錄
- 1 基本知識
- 1.1 select 切換數(shù)據(jù)庫
- 1.2 dbsize 查看當(dāng)前數(shù)據(jù)庫key的數(shù)量
- 1.3 flushdb 清空當(dāng)前庫
- 1.4 flushall 清空全部庫(16個庫)
- 1.5 端口6379由來
- 1.6 統(tǒng)一密碼管理
- 1.7 單線程+多路IO復(fù)用
- 2 redis鍵(key)
- 2.1 keys * 查看當(dāng)前庫所有key(匹配:keys *1 )
- 2.2 exists key 查看庫中是否存在key
- 2.3 type key 查看制定key的類型
- 2.4 del 刪除key數(shù)據(jù)
- 2.5 unlink key 根據(jù)value選擇非阻塞刪除
- 2.6 expire key 10 為指定的key設(shè)置過期時間
- 2.7 ttl key 查看還有多少秒過期
- 3 Redis字符串
- 3.1 set 添加值
- 3.2 get 添加值
- 3.3 append 追加值
- 3.4 strlen 獲取值得長度
- 3.5 setnx 互斥設(shè)置值
- 3.6 incr 將key中存儲的值增加1
- 3.7 decr 將key中存儲的值減1
- 3.8 incrby 將key中的值步長增加指定的值
- 3.9 decrby 將key中的值步長減少指定的值
- 3.10 mset 同時設(shè)置多個鍵值對
- 3.11 mget 同時獲取多個鍵值對
- 3.12 msetnx 同時互斥設(shè)置多個鍵值對
- 3.13 getrange 獲取值得范圍
- 3.14 setrange 設(shè)置值所存儲的字符串
- 3.15 setex 設(shè)置鍵值的同時設(shè)置過期時間秒
- 3.16 getset 以新值替換舊值
- 3.17 String的數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 4 Redis 列表List
- 4.1 lpush 從左邊插入一個或多個值
- 4.2 lrange 從左邊取出一個或多個值
- 4.3 rpush 從右邊插入一個或多個值
- 4.4 lpop 從左邊吐出一個值
- 4.5 rpop 從右邊吐出一個值
- 4.6 rpoplpush 從k1列表右邊吐出一個值插入到k2列表左邊
- 4.7 lindex 按照索引下標(biāo)獲得元素(從左到右)
- 4.8 llen 獲得列表的長度
- 4.9 linsert 在值得后面插入值
- 4.10 lrem 刪除list中的指定元素
- 4.11 lset 將列表下標(biāo)index的值替換成value
- 4.12 List的數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 5 Redis 集合Set
- 5.1 sadd 添加元素
- 5.2 smembers 取出集合中的元素
- 5.3 sismenber 判斷集合中是否存在元素
- 5.4 scard 返回集合中的元素個數(shù)
- 5.5 srem 刪除集合中的指定元素
- 5.6 spop 隨機(jī)從集合中取出一個值
- 5.7 srandmember 隨機(jī)從集合中取出n個值,不會從集合中刪除
- 5.8 smove 將集合中的元素移動到另一個集合中
- 5.9 sinter 取出集合中的交集
- 5.10 sunion 取出集合中的并集
- 5.11 sdiff 取出集合的差集
- 5.12 Set集合數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 6 Redis哈希(Hash)
- 6.1 hset 向hash中添加值
- 6.2 hget 從hash中取出值
- 6.3 hmset 批量設(shè)置hash值
- 6.4 hexists 查看哈希表key中,給定域field是否存在
- 6.5 hkeys 列出該hash集合的所有filed
- 6.6 hvals 列出該hash集合的所有value
- 6.7 hincrby 為哈希表key中的域field 的值加上增量1
- 6.8 hsetnx 將哈希表中key中的域field的值設(shè)置為value,當(dāng)且僅當(dāng)域field不存在
- 6.9 Hash數(shù)據(jù)結(jié)構(gòu)總結(jié)
- 7 Redis有序集合Zset(sorted set)
- 7.1 zadd 添加元素
- 7.2 zrange 取出元素
- 7.3 zrangebyscore 取出范圍內(nèi)的值
- 7.4 zrevrangebyscore 倒序取出范圍元素
- 7.5 zincrby 為元素的score加上增量
- 7.6 zrem 刪除元素
- 7.7 zconut 統(tǒng)計該集合分?jǐn)?shù)區(qū)間下的元素個數(shù)
- 7.8 zrank 返回集合中的排名
- 7.9 Zset 數(shù)據(jù)結(jié)構(gòu)總結(jié)
總結(jié)
以上是生活随笔為你收集整理的2 Redis基本知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1 Redis安装
- 下一篇: 3 Redis 配置文件