liuyulin
发布于 2024-02-02 / 34 阅读
0
0

Redis

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启动的时候会自动检查,恢复数据。


评论