redis是什么
redis的重要特性
1.速度快
所有数据都放在内存中,内存大小与redis性能相关。
redis使用c语言编写。
redis使用单线程架构。
2.基于键值对存储
有五种数据结构:字符串,哈希,列表,集合,有序集合。
3.丰富的功能
提供了键过期功能,实现了缓存。
提供了发布订阅功能,可以实现消息系统。
提供了pipeline功能,将一批命令一次性传到redis,减少开销。
4.简单稳定
源码很少,3.0版本后只有五万行代码。
不依赖操作系统中的类库。
使用单线程模型法使redis服务端处理模型变得简单。
5.支持多种客户端语言
java,php,python等
6.支持数据持久化
RDB和AOF
7.主从复制
8.高可用和分布式:哨兵,集群
应用场景
1.缓存-键过期时间
缓存session会话,比如淘宝,登录之后一般24小时内不用重新登录。
缓存用户信息,找不到就去mysql找,然后再写入redis。
优惠券过期。
上述第四点,比如我发了一条动态,我@列表里所有女生,女生就是一个标签。集合有求同存异的功能,比如我爱好【篮球,足球,音乐】,你爱好【游泳,泡妞,音乐】,那么我们就可以做个功能,把关于音乐的一些新闻推送给标签为音乐的人。
5.消息队列系统-发布订阅
结合ELK进行日志收集
redis安装部署
目录规划:
安装部署
make install就是将一些可执行文件复制到环境变量里,变成命令。
然后执行install_server.sh,然后会出现一些交互式确认,我们可以看到下图的conf,里面有一个配置文件,官方最全的配置文件模板,然后执行完会自动开启redis服务器。(这一步我只是为了说明在哪里去找conf文件)
现在来编写我们的简易版配置文件,在conf目录下建立一个文件。
启动redis服务器
客户端登录redis服务器并查看日志
redis基本操作
全局命令
查看所有key
key *
此命令线上禁用,因为他会列出素有的key,内存直接就挂了。
字符串
MSET是一次性插入多个key-value,然后redis有一个特点,当新插入的key与已有的key重复,那么新的key对应的值会覆盖旧的。
上图是获取多个value,如果没有,则显示nil
TTL查看key-value的存活时间,如果是-1,就说明永久存在(除非你手动del);expire是设置存活时间,当存活时间结束后,再用TTL查看,就变成-2了,说明过期后被删掉了。严谨来说,-2是表示没有这个值。
可以用expire命令来做优惠卷过期时间,k2里面存的是一张优惠卷,100指的是100秒后过期,然后之前拼多多后台有人又在下面执行了一句set k2 v2,然后k2就被重置了,再用TTL查看过期时间,结果为-1,-1代表永不过期。
列表
哈希
集合
redis持久化
如下图,我把redis关了,然后再打开,会发现数据全没了,因为redis数据是在内存中的,必须要持久化到磁盘。
RDB方式持久化
在执行BGSAVE后,会产生一个.rdb文件,当我关掉redis后,再打开redis,它会自动将.rdb加载到内存,然后就有数据了。
如果在配置文件里配置RDB,则如下图所示:
【注】就算没有满足save的条件,但是只要你配置了RDB,那么当你以shutdown方式关闭了redis后,他会自动先bgsave,然后再关闭;如果你用kill -9的方式关掉redis,那么并不会自动触发bgsave;
如果你用kill或pkill关掉redis,那么也是会先bgsave,然后才被kill。
AOF方式持久化
类似于mysql的binlog,也就是只记录操作。
AOF与RDB可共存,然后内存默认读AOF。