Redis
Redis推荐使用Linux版本
安装环境
下载 解压 make
修改配置文件 设置后台启动
设置redis.config中的daemonize no改为yes
启动redis
在src目录下./redis-server /配置文件
./redis-cli启动客户端
ping 测试连通
set get 测试redis
shutdown关闭服务器
测试redis性能
测试100个并发连接 每个并发100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
Redis有三个作用:数据库,缓存,消息中间件MQ
Redis默认有16个数据库 可以使用这些数据库
select 数字 可以切换数据库
dbsize 可以查看数据库的大小
flushdb 清除当前数据库
flushall 清楚全部数据库
Redis是单线程的
redis是基于内存操作的,cpu并不是内存平静,redis的瓶颈时机器内存和网络带宽,既然可以通过使用单线程实现,就没必要用多线程
Redis基本数据类型
字符串,散列,列表,集合,有序集合。。。
key操作
exists key 返回这个名有几个值
move key db 移除一个kv
expire key seconds 设置过期时间
ttl key 查看key剩余时间
type key 查看key类型
String类型
set和get就不说了
append key value 在key后面追加字段 如果当前key不存在 就相当于set
strlen key 获取字段长度
incr key 自增1
decr key 自减1
incrby key increment 增加步长的值
decrby key increment 减少步长的值
getrange key start end 获取key一个范围内的值,0到-1的话就是查看整个字符串
setrange key offset value 修改从offset之后的字串
setex key seconds value 设置key 并且设置过期时间
setnx key value 如果不存在key,则设置key
mset key value 批量设置值
mget key 批量获取值
msetnx key value 不存在,批量设置
getset key value 组合命令 如果不存在 则返回null 如果存在 直接覆盖
List类型
所有的list操作都是以l开头的
lpush key elements... 向队列中添加数据
lrange key start stop 获取队列中的值
用r开头的操作可以从右边开始操作
rpush key elements... 从右边向队列添加值
lpop key [count] 从左边取出
rpop key [count] 从右边取出
lindex key index 通过下表获得值 下表从0开始计算
llen key 获取队列长度
lrem key count element 移除指定数量特定的值
ltrim key start stop 修剪list中的一段
rpoplpush source destination 组合命令 移除列表最后一个元素并将其添加到另外一个表
lset key index element 将列表中指定下标的值替换为另外的一个值
linsert key before|after pivot element 往列表中指定位置前面或者后面插入指定的值
Redis事务
redis不同于关系型数据库,redis的事务不保证原子型!但是单条语句能保证原子性。
redis也不存在隔离级别的概念
redis事务分为三个阶段:开启事务(multi),命令入队,执行事务(exec)。
redis可以实现乐观锁
discard 放弃事务
代码错误直接报错,所有的命令都不会被执行;运行中错误在执行时抛出异常,下面的代码正常执行。
Redis监控
乐观锁与悲观锁不解释
redis中用watch去监控
使用watch可以当作乐观锁操作
用unwatch放弃监视 然后再重新watch监视 获取最新的值
可以在执行事务前先解锁再上锁 就能够实现自旋锁
Jedis
java操作redis的工具
先导入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.3</version>
</dependency>编码测试
连接数据库
操作命令
断开连接
springboot整合Redis
springboot已经抛弃了jedis,因为jedis是单线程的。
springboot在创建项目的时候选择添加NoSql中的Redis
在配置文件中配置redis
spring:
redis:
host: 127.0.0.1
port: 6379使用RedisTemplate操纵Redis
.opForxxx对什么结构进行操作
一般使用编写好的util工具类来对Redis操作
RDB持久化
Redis会在指定的时间间隔将内存内的数据集写入磁盘,恢复时将快照文件直接读到内存里。
Redis会创建一个子进程来进行持久化,会将数据写到一个临时文件中,持久化进程都结束之后,将临时文件替换上次持久化好的文件。主进程不进行任何IO操作,从而确保性能。
如果RDB最后一次持久化操作宕机,就会造成丢失数据
rdb保存文件是dump.rdb
在哪个目录下启动redis,rdb文件就保存在哪个目录下。
满足配置文件中的save条件可以触发保存rdb文件
flushall命令会触发保存rdb文件
退出redis会触发保存rdb文件
恢复rdb文件中的数据,只需要把rdb文件放在redis的启动目录下就可以了,redis启动的时候会自动检查,恢复数据。