使用Redis实现分布式锁 redis命令:set users 10 nx ex 12 原子性命令 //使用uuid,解决锁释放的问题 @GetMapping public void testLock() throws InterruptedException { String uuid = UUID.randomUUID().toString(); Boolean b_loc
1、缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对用的value,就应该去后端系统查找(比如DB数据库)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 2、怎么解决? 对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert之后清理缓存。 对一定不存在的key进行过滤。可以把所有的可能存在的
1、淘汰缓存 数据如果为较为复杂的数据时,进行缓存的更新操作就会变得异常复杂,因此一般推荐选择淘汰缓存,而不是更新缓存。 2、选择先淘汰缓存,再更新数据库 假如先更新数据库,再淘汰缓存,如果淘汰缓存失败,那么后面的请求都会得到脏数据,直至缓存过期。 假如先淘汰缓存再更新数据库,如果更新数据库失败,只会产生一次缓存穿透,相比较而言,后者对业务则没有本质上的影响。 3、延时双删策略 如下场景:同时有一
1、缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对用的value,就应该去后端系统查找(比如DB数据库)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 2、怎么解决? 对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert之后清理缓存。 对一定不存在的key进行过滤。可以把所有的可能存在的
Jedis 和 Redisson 都是Java中对Redis操作的封装。Jedis 只是简单的封装了 Redis 的API库,可以看作是Redis客户端,它的方法和Redis 的命令很类似。Redisson 不仅封装了 redis ,还封装了对更多数据结构的支持,以及锁等功能,相比于Jedis 更加大。但Jedis相比于Redisson 更原生一些,更灵活。
Redisson、Jedis、lettuce 等等,官方推荐使用 Redisson。
1、Redis相比memecache,拥有更多的数据结构和支持更丰富的数据操作。 (1)Redis支持key-value,常用的数据类型主要有String、Hash、List、Set、Sorted Set。 (2)memecache只支持key-value。 2、内存使用率对比,Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于memecache。 3、性
redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。 RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上; AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。 其实R
Redis6.0之前是单线程的,Redis6.0之后开始支持多线程; redis内部使用了基于epoll的多路服用,也可以多部署几个redis服务器解决单线程的问题; redis主要的性能瓶颈是内存和网络; 内存好说,加内存条就行了,而网络才是大麻烦,所以redis6内存好说,加内存条就行了; 而网络才是大麻烦,所以redis6.0引入了多线程的概念, redis6.0在网络IO处理方面引入了多线
代码更清晰,处理逻辑更简单; 不用考虑各种锁的问题,不存在加锁和释放锁的操作,没有因为可能出现死锁而导致的性能问题; 不存在多线程切换而消耗CPU; 无法发挥多核CPU的优势,但可以采用多开几个Redis实例来完善;
1、先把Redis的连接池拿出来 JedisPool pool = new JedisPool(new JedisPoolConfig(),"127.0.0.1"); Jedis jedis = pool.getResource(); 2、存取值 jedis.set("key","value"); jedis.get("key"); jedis.del("key"); //给一个key叠加va
字符串 hash list set zset
1、基于本机内存的缓存 当调用api访问数据库时,假如此过程需要2秒,如果每次请求都要访问数据库,那将对服务器造成巨大的压力,如果将此sql的查询结果存到Redis中,再次请求时,直接从Redis中取得,而不是访问数据库,效率将得到巨大的提升,Redis可以定时去更新数据(比如1分钟)。 2、如果电脑重启,写入内存的数据是不是就失效了呢,这时Redis还提供了持久化的功能。 3、哨兵(Sentin
Redis是基于内存的nosql数据库,可以通过新建线程的形式进行持久化,不影响Redis单线程的读写操作 通过list取最新的N条数据 模拟类似于token这种需要设置过期时间的场景 发布订阅消息系统 定时器、计数器
Redis是一个key-value存储系统,它支持存储的value类型相对更多,包括string、list、set、zset(sorted set --有序集合)和hash。这些数据结构都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中,Redis会周期性的把更新的