Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

Redis缓存设计与性能优化精要 PDF 下载


分享到:
时间:2023-12-28 10:07来源:http://www.java1234.com 作者:转载  侵权举报
Redis缓存设计与性能优化精要
失效链接处理
Redis缓存设计与性能优化精要  PDF 下载 

 
 
 
相关截图:
 


主要内容:


布隆过滤器就是一个大型的位数组和几个不一样的无偏 hash 函数。所谓无偏就是能够把元素的 hash 值算得
比较均匀。
向布隆过滤器中添加 key 时,会使用多个 hash 函数对 key 进行 hash 算得一个整数索引值然后对位数组长度
进行取模运算得到一个位置,每个 hash 函数都会算得一个不同的位置。再把位数组的这几个位置都置为 1 就
完成了 add 操作。
向布隆过滤器询问 key 是否存在时,跟 add 一样,也会把 hash 的几个位置都算出来,看看位数组中这几个位
置是否都为 1,只要有一个位为 0,那么说明布隆过滤器中这个key 不存在。如果都是 1,这并不能说明这个
key 就一定存在,只是极有可能存在,因为这些位被置为 1 可能是因为其它的 key 存在所致。如果这个位数组
比较稀疏,这个概率就会很大,如果这个位数组比较拥挤,这个概率就会降低。
这种方法适用于数据命中不高、 数据相对固定、 实时性低(通常是数据集较大) 的应用场景, 代码维护较为
复杂, 但是缓存空间占用很少
可以用redisson实现布隆过滤器,引入依赖:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.6.5</version>
</dependency>
示例伪代码:
package com.redisson;
2
import org.redisson.Redisson;import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
7
public class RedissonBloomFilter {
9
10 public static void main(String[] args) {
11 Config config new Config();
12 config.useSingleServer().setAddress("redis://localhost:6379");
13 //构造Redisson
14 RedissonClient redisson Redisson.create(config);
15
16 RBloomFilter<StringbloomFilter redisson.getBloomFilter("nameList");
17 //初始化布隆过滤器:预计元素为100000000L,误差率为3%,根据这两个参数会计算出底层的bit数组大小
18 bloomFilter.tryInit(100000000L,0.03);
19 //zhuge插入到布隆过滤器中
20 bloomFilter.add("zhuge");
21
22 //判断下面号码是否在布隆过滤器中
23 System.out.println(bloomFilter.contains("guojia"));//false
24 System.out.println(bloomFilter.contains("baiqi"));//false
25 System.out.println(bloomFilter.contains("zhuge"));//true
26 }
27 }
使用布隆过滤器需要把所有数据提前放入布隆过滤器,并且在增加数据时也要往布隆过滤器里放,布隆过滤器
缓存过滤伪代码:
//初始化布隆过滤器
RBloomFilter<StringbloomFilter redisson.getBloomFilter("nameList");
//初始化布隆过滤器:预计元素为100000000L,误差率为3%
bloomFilter.tryInit(100000000L,0.03);
5
//把所有数据存入布隆过滤器
void init(){
for (String keykeys) {
bloomFilter.put(key);
10 }
11 }
12
13 String get(String key) {
14 // 从布隆过滤器这一级缓存判断下key是否存在
15 Boolean exist bloomFilter.contains(key);
16 if(!exist){
17 return "";
18 }
19 // 从缓存中获取数据
20 String cacheValue cache.get(key);
21 // 缓存为空22 if (StringUtils.isBlank(cacheValue)) {
23 // 从存储中获取
24 String storageValue storage.get(key);
25 cache.set(keystorageValue);
26 // 如果存储数据为空, 需要设置一个过期时间(300)
27 if (storageValue == null) {
28 cache.expire(key60 5);
29 }
30 return storageValue;
31 else {
32 // 缓存非空
33 return cacheValue;
34 }
35 }


 
 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐