1.redis的安装
1.windows下的redis服务启动
redis-server.exe redis.windows.conf
2.linux下的reids安装
1.第一步安装gcc环境
yum install gcc #安装最新gcc环境
2.上传redis的gz压缩包
3.解压压缩包到某个路径
- tar -zxvf 名字
4.进入到解压的路径使用make编译
5.使用make install安装redis
6.安装后的文件介绍
- redis-benchmark: 性能测试工具,可以在自己本机运行,看看自己的本机性能如何
- redis-check-aof:修复有问题的apf文件,rdb和aof
- redis-check-rdb:修复有问题的rbd文件
- redis-cli:客户端操作入口
- redis-sentinel:redis集群使用
- redis-server:redis服务器启动命令
3.linux下的redis后台启动
- 修改redis.conf配置文件中的daemonize no为yes
- 在进入安装redis的路径下/USR/LOCAL/BIN下启动redis
- redis-service /etc/redis.conf
- ps -ef | grep redis查找是否启动成功
- 关闭为
- shoutdown
2.redis的五大数据类型
1.Redis字符串String
- String类型是二进制安全的,以为着redis的String可以包含任何数据
- 一个String的value最多可以是512m
- 常用命令
- set key value :添加对应的key键和value数据
- 如果设置相同的key那么之前的值会被覆盖
- get key: 获取对应key的值
- append key value :把value值给对应的key追加到末尾
- strlen key :获取指定key的值长度
- setnx key value :只有在key不存在的情况下设置value
- incr key :将key中存储的数字值增加1
- 只能对数字值操作,如果为空,新增值为1
- decr key:将key中存储的数字值减1
- incrby/decrby key 数:指定数来进行加减
- mset key value key value :创建多个key和value
- mget key key :获取多个key的值
- msetnx key value key value:创建多个key和value如果存在不创建
- getrange key 起始位置 结束位置 :reids的截取字符串
- setrange key 起始位置 value:用value覆盖对应key位置之后的值
- setex key 过期时间 value :设置键值的同时设置过期时间,单位秒
- getset key value:以新欢旧,设置了新值同时获取旧值
- set key value :添加对应的key键和value数据
2.Redis列表List
- lpush/rpush key value value :添加一个列表字段,从左向右添加或从右向左
- lpop/rpop key 【要删除多少个数】 :从左边/右边吐出一个值,
- lrange key 下标 -1 :根据下标获取数据,-1为获取全部,开始下标,结束下标
- ropolpush key1 key2 :从key1列表的右边吐出一个值到key2的左边
- lindex key 下标 :按照下标获取值
- llen key :获取列表长度
- linsert key before value newvalue:给key的value后边添加newvalue
- lrem key n value:删除左边n个value
- lset key index value:将列表key下标为index的值替换成value
3.Redis集合Set
4.Redis哈希Hash
5.Redis有序集合Zset
3.redis的一些操作
1.键的操作
- keys * 查看当前库全部的key
- exists key 判断某个key是否存在
- type key 查看你的key是什么类型
- del key 删除指定的key数据
- UNlink key 根据value选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
- expire key 10 给指定key设置过期时间,秒为单位
- ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
2.库操作
- select 库数 :写1的话那就是选择库1
- dbsize:当前库的key数量
- flushdb :清除当前库全清
- flushall:清除全部数据库
4.配置文件
- 修改redis.conf配置文件中的daemonize no为yes
- 可以让redis以后台方式启动
- bind 127.0.0.1 -::1,protected-mode no
- 配置文件默认配置为只能本地访问,如果想要其他电脑访问需要修改地址
- 如果注释掉的话那就是全部ip都可以访问
- protected-mode保护模式改为no,才可以其他电脑访问
- 备份配置
- dbfilename dump.rdb
- 配置文件中为redis持久化保存的文件名字
- dir ./
- 配置文件中为redis持久化保存的文件路径
- ./默认为当前目录
- stop-writes-on-bgsave-error yes
- yes:标识如果当前磁盘写不进去了那就不会在进行备份写入了
- rdbcompression yes
- 是否对持久化进行压缩操作
- rdbchecksum yes
- 数据效验,效验数据是否有损坏,有的话不进行备份
- dbfilename dump.rdb
- AOF备份配置
- appendonly no
- 把no改为yes表示启用AOF备份
- AOF同步频率设置
- appendfsync always
- redis的每一步写操作都会被同步
- appendfsync everysec
- 每秒同步,每秒记入日志一次,如果停机,本秒的数据可能丢失
- appendfsync no
- redis不主动进行同步,把同步时机交给操作系统
- appendfsync always
- appendonly no
5.redis的发布和订阅
1.什么是发布和订阅
- reids发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消失,订阅者(sub)接收消息
- reids客户端可以订阅任意数量的频道
2.订阅和发布的指令
- 订阅
- SUBSCRIBE channel1 :第二个为订阅的频道名
- 发布
- publish 频道名 内容
6.java连接redis使用jedis技术
-
<!-- 连接redis的依赖--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.2.3</version> </dependency>
-
Jedis jedis = new Jedis("192.168.106.130",6379); // 测试是否连接成功 String ping = jedis.ping(); System.out.println(ping);
7.springboot整合redis
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
配置文件
-
spring: redis: lettuce: pool: #连接池最大连接数使用-1表示没有限制 max-active: 20 #最大阻塞时间-1表示没限制 max-wait: -1 #最大空闲连接数 max-idle: 5 #最小空闲连接数 min-idle: 0 #数据库索引 database: 0 #ip地址 host: 192.168.106.130 #端口号 port: 6379 #超时时间毫秒 timeout: 10000
-
-
使用自动注入的
-
package com.yin.redis.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController @RequestMapping("/redis") public class RedisController { @Resource private StringRedisTemplate stringRedisTemplate; @GetMapping("/testRedis") public String testRedis(String value){ stringRedisTemplate.opsForValue().set(value+":name",value); String name = stringRedisTemplate.opsForValue().get(value+":name"); return name; } }
-
8.redis事务
- redis开启事务后,会把当前一串给执行,其他客户端的请求会在后边等待
- 如果在队列中执行有报错,那么其他的会正常执行
1.Multi
- 把要执行的指令放在这里
2.Exec 相当于事务提交
- 执行以放入的指令
3.discard 相当于回滚
- 取消执行
9.ab模拟高并发测试
- 安装:yum install httpd-tools
- eq -n 请求数量 -c请求数量中有多少是并发请求 -p参数文件 -T application/x-www-form-urlencoded 192.168.0.70:8082/redis/Check
- ab -n 1000 -c 100 -p postfile -T application/x-www-form-urlencoded http://192.168.0.70:8082/redis/Check
10.redis持久化
1.redis提供两个不同形式的持久化方式
RDB (Redis DataBse)
-
在指定的时间间隔内将内存中的数据输出到磁盘中
-
备份是如何执行的
- Redis会单独创建(FORK)一个子进程来进行持久化,会先将数据
写入
到一个临时文件
中,待持久化过程都结束了,再用这个临时文件替换上次持久化
好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效,RDB的缺点是最后一次持久化后的数据可能丢失
- Redis会单独创建(FORK)一个子进程来进行持久化,会先将数据
-
根据配置文件自动进行配置的
-
数据恢复的操作
- 把备份的rbd文件的名字改为dump在reids的启动目录下即可,他会自动加载数据
AOF(Append OfFile)
- 以
日志的形式来记录每个写操作(增量保存)
,将Redis执行过的所有指令记录下来(读操作不记录)
,只许追加文件但是不可以改写文件
,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一遍以完成数据的恢复工作 - AOF持久化流程
- 客户端的请求写命令会被append追加到AOF缓冲区
- AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中
- AOF文件大小超过重写策略或手动重写时,会被AOF文件rewrite重写,压缩AOF文件容量
- Redis服务重启时,会重新load加载AOF文件汇总的写操作达到数据恢复的目的
- AOF默认是不开启的
- 可以在redis.conf中配置文件名称,默认为appendonly.aof
- AOF文件的保存路径也是dir
- AOF同步频率设置
- appendfsync always
- redis的每一步写操作都会被同步
- appendfsync everysec
- 每秒同步,每秒记入日志一次,如果停机,本秒的数据可能丢失
- appendfsync no
- redis不主动进行同步,把同步时机交给操作系统
- appendfsync always