常用命令介绍:

命令用例介绍link
rpushrpush key-name value [value ...]将一个或多个值推入到列表的右端
lpushlpush key-name value [value ...]将一个或多个值推入到列表的左端
rpoprpop key-name移除并返回列表最右端的元素
lpoplpop key-name移除并返回列表最左端的元素
lindexlindex key-name offset返回列表中偏移量为offset的元素
lrangelrange key-name start end返回列表从start偏移量到end偏移量范畴内的所有元素,其中偏移量为start和偏移量为end的元素也会蕴含在被返回的元素之内
ltrimltrim key-name start end对列表进行修剪,只保留从start偏移量到end偏移量范畴内的元素,其中偏移量为start和偏移量为end的元素也会被保留
blpopblpop key-name [key-name ...] timeout从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并期待可弹出的元素呈现
brpopbrpop key-name [key-name ...]从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并期待可弹出的元素呈现
rpoplpushrpoplpush source-key dest-key从source-key列表中弹出位于最右端的元素,而后将这个元素推入dest-key列表的最左端,并向用户返回这个元素
brpoplpushbrpoplpush source-key dest-key timeout从source-key列表中弹出位于最右端的元素,而后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;如果source-key为空,那么在timeout秒之内阻塞并期待可弹出的元素呈现
lremlrem key count element从列表中删除一些(count)等于element的元素,count = 0,删掉列表中所有等于element的元素, count > 0,从左到右删除指定数量个等于element的元素, count < 0,从右到左删除指定数量个等于elemnt的元素https://redis.io/commands/lrem/
linsertlinsert key BEFORE或AFTER pivot element在列表某个元素(pivot)的后面或前面插入元素element。如果pivot有多个,定位到列表左起第一个;如果pivot不存在,返回-1,否则返回列表长度https://redis.io/commands/lin...
llenllen key返回列表的长度。如果列表不存在,返回0。https://redis.io/commands/llen/
lsetlset key index element给列表指定地位设置成元素elementhttps://redis.io/commands/lset/
rpushxrpushx key-name value [value ...]在列表存在的状况,从左边插入多个值。如果列表不存在,没有任何影响https://redis.io/commands/rpu...
lpushxlpushx key-name value [value ...]在列表存在的状况,从右边插入多个值。如果列表不存在,没有任何影响https://redis.io/commands/lpu...
LMPOPnumkeys key [key ...] LEFT 或 RIGHT [COUNT count]Pop elements from a listhttps://redis.io/commands/lmpop/
BLMPOPnumkeys key [key ...] LEFT 或 RIGHT [COUNT count]Pop elements from a list, or block until one is availablehttps://redis.io/commands/blm...
LMOVELMOVE source destination LEFT 或 RIGHT LEFT 或 RIGHTPop an element from a list, push it to another list and return it
BLMOVEsource destination LEFT 或 RIGHT LEFT 或 RIGHT timeoutPop an element from a list, push it to another list and return it; or block until one is available
LPOSLPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]Return the index of matching elements on a list

应用场景

最近联系人列表

保护长度为 100 的最近联系人列表

  1. 如果指定的联系人已在列表中,则从列表中移除 (lrem) lrem list 1 mobile
  2. 将指定的联系人增加到列表最后面 (lpush) lpush list mobile
  3. 如果增加实现后,列表长度超过 100 ,则对列表进行修剪,仅保留列表后面的 100 个联系人 (ltrim) ltrim list 0 100

限度短信频率,比方同一手机号60分钟之内只能发送3条

限度短信频率,同一手机号60分钟之内只能发送3条

精华版采纳队列实现

local lKey = KEYS[1] -- 列表键,比方间接应用手机号local maxCount = tonumber(ARGV[1]) --肯定工夫内短信最多发送条数-- 以后工夫戳,毫秒local currentTime = tonumber(ARGV[2])-- 一段时间:一分钟、一小时、一天,毫秒local period = tonumber(ARGV[3])-- 查看以后队列大小。local lSize = redis.call("llen", lKey)-- 阐明一段时间内队列未满,间接压入队列,返回 1,示意能够发送短信local flag = falseif lSize < maxCount then    -- 记录短信的发送工夫(毫秒)    redis.call("lpush", lKey, currentTime)    flag = trueelse    -- 取队列当中最早一条短信的发送工夫,拿以后工夫减去此工夫,如果超过“一段”工夫,则能够移掉,并压入以后短信工夫。    local oldestTime = tonumber(redis.call("lindex", lKey, -1))    local result = currentTime - oldestTime    -- 以后工夫与第一条短信的发送工夫距离大于“周期”,才可持续发送    if result > period then        redis.call("rpop", lKey) -- 弹出队列中最早一条短信发送工夫        redis.call("lpush", lKey, currentTime) -- 压入最新一条短信的发送工夫        flag = true    endend-- 刷新键的过期工夫为“一段”工夫。redis.call("expire", lKey, period/1000)-- flag: true 示意能够发送短信,false 则不能发送短信if flag then    return 1endreturn 0

简陋版

--[[ 实现拜访频率的脚本. 参数:  KEY[1] 用来标识同一个用户的id ARGV[1] 过期工夫 ARGV[2] 过期工夫内能够拜访的次数 返回值: 如果没有超过指定的频率, 则返回1; 否则返回0 ]]local times = redis.call('incr', KEYS[1])if times == 1 then  -- 阐明刚创立, 设置生存工夫    redis.call('expire', KEYS[1], ARGV[1])endif times > tonumber(ARGV[2]) then  return 0endreturn 1