开头:
Redis使用单线程+多路IO复用
在业务系统中,并发量非常大,使用Redis作为中间件缓存,可以大大的减轻Mysql的压力。
当系统的并发量比较高的时候,请求会直接落在Mysql上,在中间插入了缓存Redis,所有的请求先到Redis中查,如果查到了直接返回,请求就不会落在Mysql上,减轻了Mysql的压力。如果没查到,再去Mysql中查,查到结果后,将数据放到Redis中,方便下一次获取。
更新的时候,先删除缓存,再更新数据库,读的时候,先读缓存,如果没有的话,就去数据库中读,同时将数据放到缓存,并返回响应。
概念:一个恶意的请求,假如有3000万个请求,要查询数据id=-1的,Redis缓存中查不到数据,然后去Mysql中查,Mysql中也查不到,那么3000万个请求全落在Mysql,永远起不来服务(恶意请求,永远查不到数据)。
解决: 在Redis中查不到,就去查Mysql,查Mysql结果为空,也将他添加到Redis缓存中,添加空值
给Key设置失效时间
概念:内部系统在启动服务器时,都要去连接数据库,请求量比较大的时候,一些系统启动失败,连接不上Mysql。
解决:预热(手动将一些数据导到Redis中)
在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘 等介质上。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式效率高
将 redis 执行过的所有写指令记录下 来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现 数据恢复了。
其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
五种数据结构:String、List、hash、set、zset
【redis数据结构 – strings】
【redis数据结构 – list】
【redis数据结构 – set】
【redis数据结构 – zset】
【redis数据结构 – 哈希】
hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
Redis事务的作用:串联多个命令防止别的命令插队
1.MULTI用来组装一个事务;
2.EXEC用来执行一个事务;
3.DISCARD用来取消一个事务;
4.WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行。
从输入multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入exec后,Redis会将之前命令队列中的命令依次执行,组队的过程中可以通过discard来放弃组队。
QUEUED的字样,这表示我们在用MULTI组装事务时,每一个命令都会进入到内存队列中缓存起来,如果出现QUEUED则表示我们这个命令成功插入了缓存队列,在将来执行EXEC时,这些被QUEUED的命令都会被组装成一个事务来执行。
WATCH本身的作用是“监视key是否被改动过”,而且支持同时监视多个key,只要还没真正触发事务,WATCH都会尽职尽责的监视,一旦发现某个key被修改了,在执行EXEC时就会返回nil,表示事务无法触发。