Redisによる指定時間内の操作回数の制限

613 ワード

1時間に5回以内のアクセス制限
        if(jedisCluster.llen("userid")>=5 && System.currentTimeMillis() - 
                Long.parseLong(jedisCluster.lindex("userid",4))<=3600*1000){
            //    
        }else{
            jedisCluster.lpush("userid",System.currentTimeMillis()+"");
            //  
        }

redisのlistデータ型により,アクセス毎にlpushコマンドで現在のユーザidをキーとし,現在のシステム時間を値としてredisに格納する.
アクセスごとに判断し、llenコマンドで格納データ数が5より大きいか否かを判断し、lindexコマンドで最後から5番目のデータ、すなわちアクセス時間を取り出す.
現在の時間と5回目のアクセス時間の差が1時間より大きいかどうかを比較し、それより大きい場合はアクセスを禁止し、そうでない場合はアクセスを許可します.