分布式缓存-Redis介绍
2020-03-09 本文已影响0人
木子葱葱
缓存的作用
提升性能、降低数据库压力、减少后端负载、消除数据库热点、IOPS提高吞吐量,最适合读多写少的场景。
缓存有哪些
本地缓存:JVM(HashMap/List/concurrentHashMap) ,Google guava Cache
分布式缓存:memcached,Redis
我们这里就不再对多种分布式缓存进行对比,后续再完善,这里只描述Redis相关的。
Redis是单线程为什么还这么快
RedisI/O多路复用1.内存操作
2.Redis的单线程避免了多线程上下文切换性能损耗的问题
3.Redis利用epoll实现了I/O多路复用,客户端的请求会被放入队列一次发送到文件事件分发器,由分发器具体分发给对应的时间处理器来执行。
Redis常用的数据类型
string ,list , set ,zset ,hash ,geo(地理位置,lbs应用)
前面五种为常用的。
Redis常用的命令
1.string
setnx key v //当key不存在时,就set一个值
//原子计数器,这里Redis的原子操作不是cas操作,是服务端的单线程执行,在服务端命令是串行的。所以跟java中的atomic还是有很大的区别的
incr key //原子操作+1
incrby key int //原子操作+对应的数字
decr key //原子操作减1
decrby key int //原子操作减对应的数字
2.list
rpush key v1 v2 v3
lpop key //模拟queue操作,先进先出
rpop key //模拟栈操作,现金后出
3.hash
hset key hkey hv //添加值
hgetall key //获取整个hash
hget key hkey //获取某个hash下的一个记录
4.set
sadd key //添加元素
smembers key //查看key
sismember key //检测某个key是否存在
scard key //count
spop key //弹出一个值
5.zset
zadd key score v
zrange key 0 -1 //按score排序列出,参数区间为范围排名
zrevrange key 0 -1 //按score倒序
zcard key //count
zrank key //排名
6.其他命令
key key* //查看所有的key,线上谨慎使用,会被打死
scan //渐进式查询,用于替代key key*
scan 0[游标] match key*[正则匹配] count 10[分页数量] //返回的第一个参数会是下一个符合值的游标
info //查看Redis服务运行信息
Redis的持久化方式
1.RDB:数据快照,定期备份,故障恢复快,但故障恢复数据会丢失。
2.AOF:命令集备份,这种方式是Redis将所有的命令都备份了下来,在故障恢复的时候用命令回放的方式重新执行一遍,数据不会丢失,但如果线上数据很大,恢复很慢
3.建议的使用方式
RDB+AOF,定期进行RDB的数据快照,在恢复的时候先预加载RDB,然后通过回放增量AOF的方式来恢复数据。
#开启混合持久化方式
aof-use-rdb-preamble=yes