List: 它的數(shù)據(jù)結(jié)構(gòu)和java中的linkedlist是一樣的,是一個(gè)雙向循環(huán)鏈表。在里面預(yù)先插入了3840000條記錄。服務(wù)器配置,pc機(jī),為Redis分配了1g內(nèi)存 2g vm。
1.插入:62ms,lpush rpush一樣。
2.刪除:lpop,rpop 63ms。
刪除第一個(gè)元素 lrem(key, value, 1) 63ms 刪除最后一個(gè)元素 780ms。但刪除最后一個(gè)元素可以使用lrem(key, value, -1)這樣也是63ms。使用lrem(key, value, 0)刪除所有等于value值的元素780ms,每次都要遍歷一遍。不推薦使用。
.
2.查詢:lindex第一個(gè)元素,70ms,lindex最后一個(gè)元素300ms。反之用-1亦然。
lrange中間的10000個(gè)元素 250ms
3.大?。簊ize一把,63ms。應(yīng)該有專門存儲(chǔ)了list大小。
4.賦值:lset 第一個(gè)元素63ms。 lset最后一個(gè)元素280ms
我使用時(shí)用的是lpush,通常經(jīng)常用到的會(huì)是第一頁,會(huì)查詢,刪除的快一些。使用時(shí),建議對List使用限長??梢酝ㄟ^trim實(shí)現(xiàn)。
另外在使用list時(shí),可以加個(gè)時(shí)間撮,比如201012。這樣12月份的數(shù)據(jù)就會(huì)存在這個(gè)List中。而10月份之前的可以存DB或者清除。
另外Redis提供了set和sortset,但是沒有LinkedHashSet。我們可以用Redis自己實(shí)現(xiàn)一個(gè)。

public boolean add(String name, String id, Object e)
{
boolean notExist = redisTemplate.setnx(name+id, 2);

if(notExist)
{
redisTemplate.lpush(name, id);
}
return notExist;
}



public boolean remove(String name, String id)
{

if(redisTemplate.delKey(name+id))
{
return redisTemplate.lrem(name, e, 1) >0 ;
}
return false;
}