wordpress怎么切換成中文的seo服務(wù)顧問
簡介
????????List 的特點:單鍵多值。底層實際是個雙向鏈表,對兩端的操作性能很高,通過索引下標的操作中間的節(jié)點性能會較差。
????????Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊),它的底層實際是個雙向鏈表
,對兩端的操作性能很高,通過索引下標的操作中間的節(jié)點性能會較差。
常用命令
lpush/rpush <key> <value1> <value2> <value3> ...
?指令從左邊 / 右邊插入一個或多個值,左右也就是首尾lrange <key> <start> <stop>
?指令按照索引下標獲得元素(從左到右,先進后出)lrange <key> 0 -1
?指令如果 start 是 0,stop 是 -1,代表獲取所有元素
127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"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>
lpop/rpop <key>
?指令從左邊 / 右邊吐出一個值。吐出后該值就不存在 key 中
127.0.0.1:6379> lrange k2 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> lpop k2
"v1"
127.0.0.1:6379> lrange k2 0 -1
1) "v2"
2) "v3"
127.0.0.1:6379> rpop k2
"v3"
127.0.0.1:6379> lrange k2 0 -1
1) "v2"
lindex <key> <index>
?指令按照索引下標獲得元素(從左到右)(-1 代表最后一個,0 代表是第一個)
127.0.0.1:6379> lpush name feng rong xu
(integer) 3
127.0.0.1:6379> lpush second xustudyxu
(integer) 1
127.0.0.1:6379> rpoplpush name second
"feng"
127.0.0.1:6379> lrange name 0 -1
1) "xu"
2) "rong"
127.0.0.1:6379> lrange second 0 -1
1) "feng"
2) "xustudyxu"
lindex <key> <index>
?指令按照索引下標獲得元素(從左到右)(-1 代表最后一個,0 代表是第一個)
127.0.0.1:6379> lindex name 0
"xu"
llen <key>
?指令獲得列表長度
127.0.0.1:6379> llen name
(integer) 2
linsert <key> before/after <value> <newValue>
?指令在元素某個值的前面 / 后面插入新值,如果 value 有多個,則插入最前面的那個
127.0.0.1:6379> lrange name 0 -1
1) "xu"
2) "rong"127.0.0.1:6379> linsert name before rong Rong
(integer) 3
127.0.0.1:6379> lrange name 0 -1
1) "xu"
2) "Rong"
3) "rong"
127.0.0.1:6379> linsert name after rong test1
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "xu"
2) "Rong"
3) "rong"
4) "test1"
lrem <key> <n> <value>
?指令從左邊刪除 n 個 value(從左到右),如果有多個一樣的 lement,則刪除列表最前面的的
127.0.0.1:6379> lpush name rong rong rong
(integer) 7
127.0.0.1:6379> lrange name 0 -1
1) "rong"
2) "rong"
3) "rong"
4) "xu"
5) "Rong"
6) "rong"
7) "test1"
127.0.0.1:6379> lrem name 2 rong
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "rong"
2) "xu"
3) "Rong"
4) "rong"
5) "test1"
lset <key> <index> <value>
?指令將列表 key 下標為 index 的值替換成 value
127.0.0.1:6379> lrange name 0 -1
1) "rong"
2) "xu"
3) "Rong"
4) "rong"
5) "test1"
127.0.0.1:6379> lrange name 0 -1
1) "rong"
2) "xu"
3) "Rong"
4) "rong"
5) "test1"
127.0.0.1:6379> lset name 1 Rong
OK
127.0.0.1:6379> lrange name 0 -1
1) "rong"
2) "Rong"
3) "Rong"
4) "rong"
5) "test1"
數(shù)據(jù)結(jié)構(gòu)
- List的數(shù)據(jù)結(jié)構(gòu)為快速鏈表quickList。
- 首先在列表元素較少的情況下會使用一塊連續(xù)的內(nèi)存存儲,這個結(jié)構(gòu)是ziplist,也即是壓縮列表。
- 它將所有的元素緊挨著一起存儲,分配的是一塊連續(xù)的內(nèi)存。
- 當(dāng)數(shù)據(jù)量比較多的時候才會改成quicklist。
- 因為普通的鏈表需要的附加指針空間太大,會比較浪費空間。比如這個列表里存的只是int類型的數(shù)據(jù),結(jié)構(gòu)上還需要兩個額外的指針prev和next
集合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ù)的時間不變。
常用命令
sadd <key> <value1> <value2> ...
?指令將一個或多個 member 元素加入到集合 key 中,已經(jīng)存在的 member 元素將被忽略
127.0.0.1:6379> sadd k1 v1 v2 v3
(integer) 3
smembers <key>
?指令取出該集合的所有值
127.0.0.1:6379> smembers k1
1) "v1"
2) "v2"
3) "v3"
sismember <key> <value>
?指令判斷集合是否為含有該值,有 1,沒有 0
127.0.0.1:6379> sismember k1 v4
(integer) 0
127.0.0.1:6379> sismember k1 v3
(integer) 1
scard <key>
?指令返回該集合的元素個數(shù)
127.0.0.1:6379> scard k1
(integer) 3
srem <key> <value1> <value2> ...
?指令刪除集合中的某個元素
127.0.0.1:6379> srem k1 v1 v2
(integer) 2
127.0.0.1:6379> smembers k1
1) "v3"
spop <key>
?指令隨機從該集合中吐出一個值,key 里就沒有該值了
127.0.0.1:6379> sadd k2 v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> spop k2
"v4"
127.0.0.1:6379> smembers k2
1) "v1"
2) "v2"
3) "v3"
srandmember <key> <n>
?指令隨機從該集合中取出 n 個值。不會從集合中刪除
127.0.0.1:6379> srandmember k2 2
1) "v1"
2) "v2"
127.0.0.1:6379> srandmember k2 2
1) "v1"
2) "v3"
smove <key1> <key2> <value>
?指令把集合中一個值從一個集合移動到另一個集合,其中 key1 為要獲取的集合,key2 為放入的集合
127.0.0.1:6379> sadd k1 v1 v2 v3
(integer) 3
127.0.0.1:6379> sadd k2 v3 v4 v5
(integer) 3
127.0.0.1:6379> smove k1 k2 k3
(integer) 0
127.0.0.1:6379> smembers k1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> smembers k2
1) "v3"
2) "v4"
3) "v5"
sinter <key1> <key2>
?指令返回兩個集合的交集元素
127.0.0.1:6379> sadd k3 v4 v6 v7
(integer) 3
127.0.0.1:6379> sinter k2 k3
1) "v4"
sunion <key1> <key2>
?指令返回兩個集合的并集元素
127.0.0.1:6379> sunion k2 k3
1) "v3"
2) "v4"
3) "v5"
4) "v6"
5) "v7"
sdiff <key1> <key2>
?指令返回兩個集合的差集元素(key1 中的,不包含 key2 中的)
127.0.0.1:6379> sdiff k2 k3
1) "v3"
2) "v5"