Java面试-Redis

Redis简介
Redis是内存数据库,读写速度很快,所以广泛用于缓存。
除了缓存,Redis也常用于分布式锁,甚至是消息队列。
Redis提供多种数据类型支持不同业务场景。Redis还支持事务、持久化、lua脚本、多种集群方案。
分布式缓存常见的技术选型方案有哪些
分布式缓存主要解决单机缓存的容量受服务器限制并且无法保存通用的信息。因为,本地缓存只在当前服务里有效,如果部署了两个相同的服务,他们两者之前的缓存数据是无法共通的。
缓存数据的处理流程
1、如果用户请求的数据在缓存中就直接返回
2、不存在就看数据库中是否存在
3、存在就更新缓存中的数据
4、不存在就返回空数据
为什么要用Redis/为什么要用缓存
高性能
访问数据库中数据是比较慢的,如果用户访问的数据属于高频数据并且不会经常改变,放在缓存中。
高并发
直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的。
Redis常见的数据结构以及使用场景分析
string
一般用在需要计数的场景,比如用户的访问次数、点赞转发量等
基本操作:
set key value
get key
strlen key
del key
get key
incr key
decr key
list
rpush key value 向list头部右边添加元素
lpop key 向list尾部左边取出
hash
hset userInfoKey name “guide” description “dev” age “24”
hget userInfoKey name
hkeys userInfoKey
hvals userInfoKey
set
sadd mySet value1 value2
smembers mySet
scard mySet
sismember mySet value1
sorted set
zadd myZset 3.0 value1
zcard myZset
zscore myZset value1
zrange myZset 0 -1
Redis单线程模型详解
Redis基于Reactor模式设计开发了自己的一套高效的事件处理模型,这套事件处理模型对应的是Redis中的文件事件处理器。由于文件事件处理器是单线程方式运行的,所以一般说Redis是单线程模型。
单线程是怎么监听大量的客户端连接呢?
Redis通过IO多路复用程序来监听来自客户端的大量连接
Redis事务
Redis通过MULTI,EXEC,DISCARD和WATCH等命令来实现事务功能。
使用MULTI后可以输入多个命令。Redis不会立即执行这些命令,而是将它们放到队列,当调用了EXEC命令将执行所有命令。
Redis的事务和关系型数据库的事务不同。
Redis不支持roll back,不满足原子性和持久性。
Redis事务提供了一种将多个命令请求打包的功能,然后,再按照顺序执行打包的所有命令,并且不会被中途打断。
三种常见的缓存读写策略
Cache Aside Pattern(旁路缓存模式)
比较适合读请求比较多的场景
服务端需要同时维系DB和cache,并且以DB结果为准。
写:
先更新DB
然后直接删除cache
读:
从cache中读取数据,读取到就直接返回
读不到从DB中读
把数据放到cache中
缺点:写操作比较频繁的话cache中的数据会被频繁的删除,会影响缓存命中率
数据库和缓存数据强一致场景:更新DB的时候同样更新cache,不过需要加一个锁/分布式锁保证来保证cache更新的时候不存在线程安全的问题。
可以短暂允许数据库和缓存数据不一致的场景:更新DB的时候同样更新cache,但是给缓存加一个比较短的过期时间,这样可以保证即使数据不一致影响也比较小。
Read/Write Through Pattern(读写穿透)
服务端把cache视为主要数据存储,从中读取数据并将数据写入。cache负责把数据读取和写入DB。
很少见,因为Redis并没有提供cache将数据写入DB的功能。
写:
先查 cache,cache 中不存在,直接更新 DB。
cache 中存在,则先更新 cache,然后 cache 服务自己更新 DB(同步更新 cache 和 DB)。
读(Read Through):
从 cache 中读取数据,读取到就直接返回 。
读取不到的话,先从 DB 加载,写入到 cache 后返回响应。
Write Behind Pattern(异步缓存写入)
更新缓存不直接更新DB,异步批量的方式更新DB。
写性能很高,适合数据经常变化但是对一致性要求没有那么高的场景,比如浏览量、点赞量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值