redis简单开始(弱鸡待更)

redis基础知识

端口:6379
redis很小,只有5M,推荐Linux部署
redis不区分大小写
总共有16个数据库,为:DB 0~DB 15;默认使用的第0个
可用作数据库,高速缓存和消息队列代理。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
redis可以直接表示对象

redis通用命令

select n:切换到DB n
dbsize:可以查看当前数据库的大小,与key数量相关。
flushdb:清空当前数据库中的键值对。
flushall:清空所有数据库的键值对。

单线程却很快的redis

Redis是单线程的,Redis是基于内存操作的。对于内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个CPU上的,在内存存储数据情况下,单线程就是最佳的方案。所以Redis的性能瓶颈不是CPU,而是机器内存和网络带宽。

数据类型

String,list,set,sorted list,hash

事务与锁的操作

事务特点

单句原子性;整段如果是语法有误(如命令写错),则返回。如果是语义有误(如字符型+1),则执行段内其余语句
顺序性:按照先后入队列顺序执行
排他性:事务一旦执行就会一直占着线程,不可被其它客户端请求打断,但是单单开启事务是可以打断的,必须要执行事务

事务操作

multi  #开始事务
众多命令
exec   #正常结束输入并开始执行
multi  #开始事务
众多命令
discard   #结束输入并清空之前语句

事务操作之watch实现乐观锁

watch使用CAS实现了乐观锁
具体实例如下:
进程1

watch money
multi
decrby money 10
incrby out 10

进程2

decrby money 10
incrby out 10

进程1

exec

进程1只能取消事务,因为watch已经存储了money进入事务前的状态,当进程1操作money,会尝试CAS置换money,由于线程2更改了状态,所以置换失败。如果想要成功执行事务,就得告知锁新的状态,即先unwatch在watch

Java配置Redis

fastjson和Jedis为什么需要一起导入
Jedis.java为什么可以连接数据库

SpringBoot整合redis

1 选择和springboot版本一致的redis启动器(默认springboot版本在spring-boot-starter-web)

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.3.7.RELEASE</version>
</dependency>

2 连接redis和程序
SpringBoot2.0后,lettuce替换了jedis,连接redis和Java程序。
因为jedis是线程不安全的,每个jedis实例仅为一条线程服务,除非是用pool
而lettuce是基于Netty的,可以在线程间传递

3 从SpringBoot寻找Template及完成配置
redis替换Template
redis不序列化会乱码

自定义Template

重写泛型,重写各种数据类型的序列化,自动装配时@Qualified指明使用的Template

持久化

RDB执行过程
RDB触发条件
RDB优缺点

雪崩,穿透

雪崩是指缓存承载不住,崩掉导致服务器崩。穿透是指缓存经常不命中,导致服务器崩

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值