java后端工程师+AI大模型进修ing(研一版‖day58)
java随笔录——redis过期策略和删除策略AI随探录——构建训练集代码随想录——回溯—组合总和目录今日总结详细内容java随笔录Redis缓存1、Redis缓存—数据过期策略(假如redis的key过期之后,会立即删除吗)2、Redis缓存—数据淘汰策略(假如redis的内存不够用时,此时向reids添加新的key,那么内存的数据删除策略是什么样子的)AI随探录代码随想录回溯—组合总和。
·
今日总结
- java随笔录——redis过期策略和删除策略
- AI随探录——构建训练集
- 代码随想录——回溯—组合总和
目录
1、Redis缓存—数据过期策略(假如redis的key过期之后,会立即删除吗)
2、Redis缓存—数据淘汰策略(假如redis的内存不够用时,此时向reids添加新的key,那么内存的数据删除策略是什么样子的)
详细内容
java随笔录
Redis缓存
1、Redis缓存—数据过期策略(假如redis的key过期之后,会立即删除吗)
答:Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。
1、惰性删除
设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key
优点:对CPU友好,只会在使用该key时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查
缺点:对内存不友好,如果一个key已经过期,但是一直没有使用,那么该key就会一直存在内存中,内存永远不会释放
2、定期删除
每隔一段时间,我们就对一些key进行检查,删除里面过期的key(从一定数量的数据库中取出一定数量的随机key进行检查,并删除其中的过期key)。
优点:可以通过限制删除操作执行的时长和频率来减少删除操作对CPU的影响。另外定期删除,也能有效释放过期键占用的内存。
缺点:难以确定删除操作执行的时长和频率。
Reids的过期删除策略:惰性删除+定期删除 两种策略进行配合使用
2、Redis缓存—数据淘汰策略(假如redis的内存不够用时,此时向reids添加新的key,那么内存的数据删除策略是什么样子的)
答:以下八种策略。
使用建议:
1.优先使用allkeys-Iru策略。充分利用LRU算法的优势,把最近最常访问的数据留在缓存中。如果业务有明显的冷热数据区分,建议使用。
2.如果业务中数据访问频率差别不大,没有明显冷热数据区分,建议使用allkeys-random,随机选择淘汰。
3.如果业务中有置顶的需求,可以使用volatile-Iru策略,同时置顶数据不设置过期时间,这些数据就一直不被删除,会淘汰其他设置过期时间的数据。
4.如果业务中有短时高频访问的数据,可以使用allkeys-lfu或volatile-Ifu策略。
AI随探录
import jieba
import pandas as pd
from gensim.models.fasttext_inner import word2_index
from sklearn.model_selection import train_test_split
from sympy.codegen.fnodes import cmplx
from tqdm import tqdm
import config
def process():
print("开始处理数据")
#读取文件
df = pd.read_json(config.RAW_DATA_DIR / "synthesized_.jsonl", lines=True,orient='records').sample(frac=0.1)
# 提取句子
sentences = []
for dialog in df['dialog']:
for sentence in dialog:
sentences.append(sentence.split(':')[1])
print(f'句子总数:{len(sentences)}')
#划分数据集
train_sentences, test_sentences = train_test_split(sentences,test_size=0.2)
#构建词表
vocab_set = set()
for sentence in tqdm(train_sentences,desc="构建词表"):
vocab_set.update(jieba.lcut(sentence))
vocab_list = ['<unk>'] + list(vocab_set)
print(f'词表大小:{len(vocab_list)}')
#保存词表
with open(config.MODELS_DIR / 'vocab.txt', 'w' , encoding='utf-8') as f:
f.write('\n'.join(vocab_list))
#构建训练集
word2_index = {word: index for index, word in enumerate(vocab_list)}
index_train_sentences = [[word2_index.get(token,0 ) for token in jieba.lcut(sentence)] for sentence in train_sentences]
print("数据处理完成")
if __name__ == '__main__':
process()
代码随想录
回溯—组合总和
给你一个 无重复元素 的整数数组
candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为
target的不同组合数少于150个。示例 1:
输入:candidates = [2,3,6,7], target = 7 输出:[[2,2,3],[7]] 解释: 2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。 7 也是一个候选, 7 = 7 。 仅有这两种组合。示例 2:
输入: candidates = [2,3,5], target = 8 输出: [[2,2,2,2],[2,3,3],[3,5]]示例 3:
输入: candidates = [2], target = 1 输出: []提示:
1 <= candidates.length <= 302 <= candidates[i] <= 40candidates的所有元素 互不相同1 <= target <= 40
class Solution {
List<List<Integer>> result = new ArrayList<>();
List<Integer> input = new LinkedList<>();
private void back(int[] candidates, int target, int indexstart, int sum) {
if(sum > target) {
return;
}
if(sum == target) {
result.add(new ArrayList<>(input));
return;
}
for(int i = indexstart; i < candidates.length; i++) {
if (sum + candidates[i] > target) break;
input.add(candidates[i]);
sum += candidates[i];
back(candidates,target,i,sum);
sum -= candidates[i];
input.removeLast();
}
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
int sum=0;
Arrays.sort(candidates);
back(candidates,target,0,sum);
return result;
}
}
更多推荐


所有评论(0)