redis应用实例
2019-12-06 本文已影响0人
jiezzy
我是如何用redis做实时订阅推送的
最全的Java操作Redis的工具类
Redis-Cluster集群整合SpringCache
https://blog.csdn.net/plei_yue/article/details/78791440
Spring和Redis整合详解
https://blog.csdn.net/fighterandknight/article/details/53432276
https://blog.csdn.net/weixin_34273481/article/details/92428114
Spring项目集成Redis,序列化方式改为Jackson2JsonRedisSerializer && redis集群配置
https://blog.csdn.net/sinat_38278330/article/details/82150879
redis使用Jackson2JsonRedisSerializer序列化问题
基于spring的redisTemplate的缓存工具类
spring-data-redis注册fastjson序列化工具
Redis(放弃用jackjson来做value的序列化,使用FastJson来做)
https://www.cnblogs.com/songanwei/p/9274348.html
https://www.cnblogs.com/aoeiuv/category/990817.html
Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer的区别
redis SortedSet队列
常用命令
KEYS *
#确认一个key 是否存在 exists key
exists
#随机返回一个key
randomkey
#重命名key rename name name_new
rename
#仅当 newkey 不存在时,将 key 改名为 newkey RENAMENX OLD_KEY_NAME NEW_KEY_NAME
Renamenx
#返回值的类型 type key
type
#返回当前数据库中key 的数目
dbsize
#删除一个key
del
#设置一个key 的过期时间(单位:秒),ttl命令检测有效时长
expire
#移除给定 key 的过期时间,使得 key 永不过期
persist
#返回 key 的剩余过期时间(以秒为单位) TTL KEY_NAME
ttl
#以毫秒为单位返回 key 的剩余过期时间 PTTL KEY_NAME
Pttl
#选择数据库(redis默认16个数据库 0~15)select 2
select
#将当前数据库中的key 转移到其它数据库中 move key 1
move
#删除 Redis 中当前所在数据库中的所有记录
flushdb
#删除 Redis 中所有数据库中的所有记录
#对于FLUSHALL命令,需要设置配置文件中appendonly no,否则服务器无法启动
flushall
#测试连接是否存活
ping
#客户端可修改 Redis 配置
config
#获取服务器配置信息。 config get *
config get
禁用命令
rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
#下面的 XX 可以定义新命令名称,或者用随机字符代替。以上的设置之后,危险命令就不会被客户端执行了
rename-command KEYS "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command FLUSHALL "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command FLUSHDB "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command CONFIG "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
那么可以通过这个函数,将一分钟内请求短信次数超过3次的手机号拉黑(具体短信请求几次根据具体业务场景确定,我们公司这个业务一分钟内请求2次短信就可以的)
补分代码如下,使用expire设置key的生命周期。在expire(多长时间内)这个key被用一次就incr一次。具体上限自己确定
注意:自增函数 ,key为自己定义字符串+手机号(方便删除)
<textarea readonly="readonly" name="code" class="Java">
public Long incr(String key) {
Jedis jedis = Redis.Operate.getJedis();
try {
return jedis.incr(key);
} finally {
if (null != jedis) {
jedis.close();
}
}
}
//使用expire设定key的生命周期,(即在多长时间内计数达到上限)
public void expire(String key, int seconds) {
Jedis jedis = Redis.Operate.getJedis();
try {
jedis.expire(key, seconds);
} finally {
jedis.close();
}
}
//最后写判断 count 数和最后自增数比较。超了就。。。。你懂得。大体如下
long count = incr(key);
if (count == 1) {
expire(key,60);
}
if (count > 1) {
//GG,你懂得
return;
}