「本文已参与「新人创作礼」活动,一起开启掘金创作之路。」
安装redis
- yum install redis
- vi /etc/redis.conf
- protected-mode设置为no
- bind 设置为0.0.0.0
- 取消requirepass注释,设置密码
- systemctl restart redis
Redis 可以用在哪些地方?
- 记录点赞数,收藏数,评论数 -- hash
- 记录用户的帖子 ID 列表顺序,便于快速显示用户的帖子列表 -- zset
- 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 -- hash
- 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 -- zset
- 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 -- hash
- 记录帖子的相关文章 ID,根据内容推荐相关帖子 -- list
- 如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID -- 计数器
- 收藏集和帖子之间的关系 -- zset
- 记录热榜帖子 ID 列表,总热榜和分类热榜 -- zset
- 缓存用户行为历史,进行恶意行为过滤 -- zset,hash
缓存雪崩
就是当缓存全部失效的时候 由于请求量很大 导致 mysql崩溃 解决办法就是 给key 增加随机的失效时间 不让缓存一下次全部失效
缓存穿透
绕开redis 对数据库请求不存在的数据 导致数据库崩溃 解决办法就是:增加参数验证,比如id 不能小于等于0 对于数据库也查不到的数据 存到缓存中的有效期设置短 或者 没数据 直接return回去
缓存击穿
热点缓存失效的瞬间,大并发请求数据库,导致崩溃 设置热点缓存不过期,加上互斥锁
为什么 Redis 中要使用 I/O 多路复用这种技术呢?
首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的, 但是由于读写操作等待用户输入或输出都是阻塞的, 所以 I/O 操作在一般情况下往往不能直接返回, 这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务, 而 I/O 多路复用就是为了解决这个问题而出现的。
数据类型1:string 字符串
是redis的最基本的类型 可以包含任何数据 包括jpg图片 或者序列化的对象
set命令 :设置键值
语法:set 键名称 值 如:set email 1071119121@qq.com
get命令:获取键值
语法:get 键名称 如:get age
incr命令/decr命令:将键值+1/-1并返回结果
语法:incr/decr 键名称 如:incr/decr age 返回的值等于原来的值+1/-1 如果这个key不存在 则会创建这个key 在进行增加
incrby命令/decrby命令:键值加上/减去任意值并返回结果
语法:incrby/decrby 键名称 要加上的值 如:incrby/decrby age 2 返回的值等于原来的值+/-2 以此类推 如果这个key不存在 则会创建这个key 在进行增加
mset/mget:一次设置多个key/一次获取多个key
如:mset hello world hehe haha php good phe his mget hello hehe php phe
persist命令:去掉key的过期时间
如:persist key
getset命令:设置一个key的新值 返回旧的值 如:getset clp zzz