Redis知识记录总结

181 阅读3分钟

「本文已参与「新人创作礼」活动,一起开启掘金创作之路。」

安装redis

  1. yum install redis
  2. vi /etc/redis.conf
  3. protected-mode设置为no
  4. bind 设置为0.0.0.0
  5. 取消requirepass注释,设置密码
  6. systemctl restart redis

Redis 可以用在哪些地方?

  1. 记录点赞数,收藏数,评论数 -- hash
  2. 记录用户的帖子 ID 列表顺序,便于快速显示用户的帖子列表 -- zset
  3. 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 -- hash
  4. 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 -- zset
  5. 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 -- hash
  6. 记录帖子的相关文章 ID,根据内容推荐相关帖子 -- list
  7. 如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID -- 计数器
  8. 收藏集和帖子之间的关系 -- zset
  9. 记录热榜帖子 ID 列表,总热榜和分类热榜 -- zset
  10. 缓存用户行为历史,进行恶意行为过滤 -- 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