1.什么是redis?
redis是一种高性能的key-value(键值对)的储存系统,也是nosql(不仅仅是sql)数据库。
2.redis的数据结构
redis提供五种数据类型:string,hash,list,set及zset(sorted set)。语法如下文。
3.redis相关配置(在redis.windows.conf文件中配置,不同版本文件名可能不同)
(一)配置文件信息
1)端口号:port(可随意更改,赋值不同配置文件可以打开不同的端口)
2)超时时间:timeout(可设置redis数据存储失效时间)
3)持久化策略:save(可设置数据在一定时间进行持久化)
一般分为AOF和RDB持久化:
AOF 被称为追加模式,或日志模式,是 Redis 提供的另一种持久化策略,它能够存储 Redis 服务器已经执行过的的命令,并且只记录对内存有过修改的命令,这种数据记录方法,被叫做“增量复制”,其默认存储文件为appendonly.aof。
RDB 把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。
AOF:
1) Windows系统
执行如下操作:
#修改配置文件,把no改为 yes
appendonly yes
#确定存储文件名是否正确
appendfilename "appendonly.aof"
#重启服务器
redis-server --service-stop
redis-server --service-start
2) Linux系统
执行如下操作:
#修改配置文件:
vim /etc/redis/redis.conf
appendonly yes # 把 no 改为 yes
#确定存储文件名是否正确
appendfilename "appendonly.aof"
#重启服务:
sudo /etc/init.d/redis-server restart
RDB:
1) 手动触发策略
手动触发是通过SAVAE命令或者BGSAVE命令将内存数据保存到磁盘文件中。如下所示:
127.0.0.1:6379> SAVE
OK
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> LASTSAVE
(integer) 1611298430
4)主从分离:slaveof
5)认证:requirepass(设置密码)
6)绑定访问ip:bind(更改服务器IP地址)
(二)启动服务器和客户端
1)直接打开redis-server文件默认启动端口为6379,即使更改了ip地址也不会生效
2)配置文件(bat,也可以命令行)启动:redis-server + 配置文件名(如 redis.windows1.conf),可以解决更改端口号不生效的问题。
3)客户端启动:redis-cli -p +端口号 -a +密码(没有密码可不加)
(三)redis语法
(string:字符)
1)set 键 值(添加string结构的数据)
2)setx 键 second 值(设置一个过期时间)
3)get 键(按键名取出值)
(dict:hash表)
1)hset 键 值(属性名 值) (添加hash结构的数据)
2)hmset 键 值(属性名 值) (批量添加)
3)hget 键 属性名 (查询)
(list:栈或队列,可以替换MQ点对点)
1)l® push 键 值(可以是多个) (添加list结构的数据,r表示从右边放,取也一样)
2)l® pop 键(取数据)
3)bl® pop 键 second(阻塞取)
(set:集合(无序),适合场景(求同存异))
1)sadd 键 值(可以是多个)(添加set结构的数据)
2)sinter 键1 键2 (求交集,以键1为参照物)
3)sdiff 键1 键2 (求差集,以键1为参照物)
(zset:有序集合)
1)zadd 键 值(可以是多个) socre(排序规则)(添加zset结构的数据)
2)zincrby 键 增量的数(累加) 值(增量)
3)zrange 键 0(起始位置) 结束位置 (查询,-1代表查询所有,默认为升序)
4)zrevrange 键 0 -1 (降序)
(订阅发布)
SUBSCRIBE channel [channel…] (订阅给定的一个或多个频道的信息)
PUBLISH channel message (将信息发送到指定的频道)
(四)缓存
什么是缓存?
预先把数据放入到某个地方(一般是内存),缓存都会出现脏数据,如何避免—>缩短同步的时间。
生产者和消费者---->共享资源(队列)<----- 缓冲
1、缓存的实现 ---->先查询缓存,如果命中就返回缓存中的数据。否则就查询并把查询结果放入缓存(一定要设置过期时间)
2、缓存可能出现的问题
1)缓存雪崩----->缓存同时失效 <------设置一个范围内失效时间(解决方法)
2)缓存穿透----->查询缓存中没有的数据 <------1)查询出空数据也放入到缓存,但是设置较短的过期时间,2)用布隆过滤器(解决方法)布隆过滤器:可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
3)缓存击穿------->热搜或热点内容,缓存失效高并发数据同时访问数据库<-------只允许一个线程去访问数据库,其他线程等待。(解决方法)
4)多次查询没有及时更新缓存出现脏数据