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