首页 > 数据库 >redis

redis

时间:2023-05-27 11:47:03浏览次数:36  
标签:过期 lock redis value key redisTemplate

常用类型

list   有序

使用:队列

列表类型可以使用 rpush 实现先进先出的功能,同时又可以使用 lpop 轻松的弹出(查询并删除)第一个元素,所以列表类型可以用来实现消息队列

基于rpush+blpop

hash

使用:Hash类型大家应该都不陌生,他就是一个键值对集合,Hash相当于一个 string 类型的 key和 value 的映射表,key 还是key,但是value是一个键值对(key-value),类比于 Java里面的 Map> 集合。

订单功能:   id作为key  ,商品订单id为内部里面的key,商品的介绍信息维value

string

使用:分布式缓存,限流,验证码

set

集合类型 (Set) 是一个无序,不可重复键值集合。它的存储顺序不会按照插入的先后顺序进行存储

zset

集合类型 (ZSet) 是一个有序,不可重复键值集合。它的存储顺序不会按照插入的先后顺序进行存储

速度比较快的原因

1、内存

2、数据结构

3、线程模型  IO的多路复用

4、字典  k-v类型数据

缓存穿透

多次查询一个不存在的数据,从而导致中间件redis失效

缓存击穿

redis的热点key在某一个时间正好过期,正好有大量的请求过来,导致直接到达数据库上面

缓存雪崩

redis的数据同一时间大量过期,从而请求直接到达数据库里面

过期策略

定时过期

设置key的过期时间,到时间就会立即对key进行清楚

惰性过期

只有当访问这个key时,才会判断这个key是否过期,过期就清除

Redis中同时使用了惰性过期和定期过期两种过期策略

持久化方式

AOF

每秒,每一个操作

RDB

每隔一段时间

如何保持和数据库一致

淘汰式缓存:在redis'里面进行关于数据的增删改是先进行数据库的删除,再进行新增

redis实现分布式锁

//使用uuid,解决锁释放的问题
@GetMapping
public void testLock() throws InterruptedException {
String uuid = UUID.randomUUID().toString();
Boolean b_lock = redisTemplate.opsForValue().setIfAbsent("lock", uuid, 10, TimeUnit.SECONDS);
if(b_lock){
Object value = redisTemplate.opsForValue().get("num");
if(StringUtils.isEmpty(value)){
return;
}
int num = Integer.parseInt(value + "");
redisTemplate.opsForValue().set("num",++num);
Object lockUUID = redisTemplate.opsForValue().get("lock");
if(uuid.equals(lockUUID.toString())){
redisTemplate.delete("lock");
}
}else{
Thread.sleep(100);
testLock();
}
}

【使用lua脚本保证分布式锁的原子性】

redis分布式锁的缺点

redis分布式锁的不能解决超时的问题

  1. 锁未被释放
  2. B锁被A锁释放了
  3. 数据库事务超时
  4. 锁过期了,业务还没执行完
  5. Redis主从复制的问题

 

标签:过期,lock,redis,value,key,redisTemplate
From: https://www.cnblogs.com/wyhqmm/p/17436426.html

相关文章

  • Linux 安装 Redis
    一、概要1.环境(1)Redis6.2.7,点击可检查最新版本;(2)RockyLinux9.1二、安装与配置1.安装Redis的安装非常简单,官方针对Ubuntu/Debian系统提供了具体指引,对于其他Linux系统也可以通过Snapcraft进行安装。对于RHEL9系统,dnf库也内置了Redis,不过该Redis是6.2.7并非最新的......
  • Redis
    Redis简介概念Redis(REmoteDictionaryServer)是一个内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件。是用C语言开发的一个开源的高性能键值对数据库,是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求。(非关系型的、分布式的、开......
  • 安装LoadRunner时提示“此计算机上缺少 vc2005_sp1_with_atl_fix_redist”的解决方法
    我的电脑在安装UFT时,被要求需要卸载本机上安装的LoadRunner11,当LoadRunner11被卸载后,进行重新安装LoadRunner11时,会报缺少vc2005_sp1_with_atl_fix_redist错误,类似下图所示:由提示信息可知,这里是由于本机缺少该组件所致,解决方案就是安装此组件,可以去网上下载,当然,我们完全没有必......
  • 批量删除rediskey(使用scan模式)
    importredisimportre#连接Redisr=redis.Redis(host='192.168.1.42',port=31448,db=0,password='Y11111')#需要删除的key的正则表达式pattern='data-*'#定义SCAN命令的游标初始值cursor=0#循环遍历Redis中符合正则表达式的key,并逐个删除while......
  • redis 持久化
    为什么需要持久化,持久化是什么redis是基于内存的所以速度快,没有与磁盘交互。但是缺点就是断电或宕机数据就没了,这是不可接受的。持久化就是把内存的数据也存在磁盘上,用于redis重启后时恢复数据。两种方式RDB和AOFRDB快照操作,持久化当前内存中的数据。分为手动触发和自动......
  • mac m1 安装docker redis最新版本
    终端输入命令,等待下载成功dockerpullimagesredis:latest查看本地是否下载成功启动redis容器dockerrun-itd--nameredis-dev-p6379:6379redis--name:随便起个名字,比如redis-dev-p6379:6379:映射容器服务的6379端口到宿主机的6379端口。外部可以直接通过宿主......
  • SpeingBoot集成Redis和Redis的五种类型数据
    目录Springboot集成redisredis-cli的一些小知识点Springboot集成redismaven配置:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>配置redisTemplate,因为只操作字符串......
  • redis 数据结构
    数据结构预算法最难啃,并且redis底层是c,需要熟悉c才好根据源码分析。先占坑吧SDSredis的String的数据结构,全称为简单动态字符串,simpledynamicstring,redis是c编写的,为什么不用c语言的字符串类型呢,肯定是为了优化性能而自定义的一种数据类型举个简单的例子:c获取字符串......
  • Redis
    Redis(REmoteDIctionaryService)是一个开源的键值对数据库服务器。Redis更准确的描述是一个数据结构服务器。Redis的这种特殊性质让它在开发人员中很受欢迎。Redis不是通过迭代或者排序方式处理数据,而是一开始就按照数据结构方式组织。早期,它的使用很像Memcached,但随着Redi......
  • Redis
    Redis1.认识redis1.1什么是NoSQLNoSQL是非关系数据库数据结构:非结构化数据关联:非关联的查询方式:非SQL查询事务特性:BASE(无法满足事务的ACID)使用场景数据结构不固定的对一致性,安全性要求不高对性能有要求1.2什么是RedisRedis是一个基于内存的键值型NoSQ......