Redis的安装和使用

 

目录

安装

上传安装文件

解压安装

安装Redis

修改配置

Redis服务器操作命令

Redis命令

入门

添加jar包依赖

String类型示例

Hash示例

List示例

缓存击穿与缓存穿透、缓存雪崩

缓存穿透

概念

解决方法

缓存击穿

概念

解决方案

缓存雪崩

概念

解决方法


安装

上传安装文件

Redis的安装和使用

解压安装

1、解压

tar -zxvf  redis-5.0.5.tar.gz

2、删除安装包

rm -f redis-5.0.5.tar.gz

这一步随意

3、修改Redis文件目录名称

Redis的安装和使用

安装Redis

两个操作  1、make  2、 make install

Redis的安装和使用

Redis的安装和使用

修改配置

找到redis目录下的redis.conf文件,执行如下命令:

vim redis.conf

1、关闭IP绑定

Redis的安装和使用

2、关闭保护模式

Redis的安装和使用

3、开启后台启动

Redis的安装和使用

Redis服务器操作命令

redis-server redis.conf 默认条件下 前台启动

redis-cli -p 6379 进入客户端 exit/quit/ctrl+c 退出客户端

redis-cli -p 6379 shutdown 或者 ps -ef |grep redis kill -9 PID号 关闭redis服务器.

Redis命令

Redis里面存储类型有五种:String、List、Set、Hash、Sort Set。

下方的命令都需要进入客户端执行

1、String类型

命令 说明 案例
set 添加key-value set username admin
get 根据key获取数据 get username
strlen 根据key获取值的长度 strlen key
exists 判断key是否存在 exists name 返回1存在 0不存在
del 删除redis中的key del key
Keys 用于查询符合条件的key keys * 查询redis中全部的key keys n?me 使用占位符获取数据 keys nam* 获取nam开头的数据
mset 赋值多个key-value mset key1 value1 key2 value2 key3 value3
mget 获取多个key的值 mget key1 key2
append 对某个key的值进行追加 append key value
type 检查某个key的类型 type key
select 切换redis数据库 select 0-15 redis中共有16个数据库
flushdb 清空单个数据库 flushdb
flushall 清空全部数据库 flushall
incr 自动加1 incr key
decr 自动减1 decr key
incrby 指定数值添加 incrby 10
decrby 指定数值减 decrby 10
expire 指定key的生效时间 单位秒 expire key 20 key20秒后失效
pexpire 指定key的失效时间 单位毫秒 pexpire key 2000 key 2000毫秒后失效
ttl 检查key的剩余存活时间 ttl key -2数据不存在 -1该数据永不超时
persist 撤销key的失效时间 persist key

2、Hash类型

命令 说明 案例
hset 为对象添加数据 hset key field value
hget 获取对象的属性值 hget key field
hexists 判断对象的属性是否存在 HEXISTS key field 1表示存在 0表示不存在
hdel 删除hash中的属性 hdel user field [field ...]
hgetall 获取hash全部元素和值 HGETALL key
hkyes 获取hash中的所有字段 HKEYS key
hlen 获取hash中所有属性的数量 hlen key
hmget 获取hash里面指定字段的值 hmget key field [field ...]
hmset 为hash的多个字段设定值 hmset key field value [field value ...]
hsetnx 设置hash的一个字段,只有当这个字段不存在时有效 HSETNX key field value
hstrlen 获取hash中指定key的值的长度 HSTRLEN key field
hvals 获取hash的所有值 HVALS user

3、List类型

命令 说明 案例
lpush 从队列的左边入队一个或多个元素 LPUSH key value [value ...]
rpush 从队列的右边入队一个或多个元素 RPUSH key value [value ...]
lpop 从队列的左端出队一个元素 LPOP key
rpop 从队列的右端出队一个元素 RPOP key
lpushx 当队列存在时从队列的左侧入队一个元素 LPUSHX key value
rpushx 当队列存在时从队列的右侧入队一个元素 RPUSHx key value
lrange 从列表中获取指定返回的元素 LRANGE key start stop Lrange key 0 -1 获取全部队列的数据
lrem 从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作: · count > 0: 从头往尾移除值为 value 的元素。 · count < 0: 从尾往头移除值为 value 的元素。 · count = 0: 移除所有值为 value 的元素。 LREM list -2 “hello” 会从存于 list 的列表里移除最后两个出现的 “hello”。 需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。
Lset 设置 index 位置的list元素的值为 value LSET key index value

注意:Redis的List集合为双端循环列表,两端都可以插入数据,可以当队列使用,也可以当做栈使用

队列:一端插入数据,另一端取出数据

栈:从哪端插入数据就从哪端取出数据

除了以上信息,其余内容可以去官网学习

官网地址:https://redislabs.com/

4、事务控制

Redis中的操作可以添加事物的支持,一项任务需要多个redis命令去配合完成的话,要进行事物的控制

Redis的安装和使用

入门

添加jar包依赖

<!--spring整合redis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
        </dependency>

String类型示例

Redis的安装和使用

setnx方法要求key不存在时才会做赋值操作,key存在时,不做修改

Redis的安装和使用

在赋值的同时设置超时时间,如果调用两个方法的话则丧失了操作的原子性

Redis的安装和使用

Hash示例

Redis的安装和使用

List示例

Redis的安装和使用

缓存击穿与缓存穿透、缓存雪崩

缓存穿透

概念

缓存穿透是指在缓存和数据库中都不存在某个数据,而用户在不停地请求这个不存在的数据,会给数据库造成很大的压力

解决方法

1、接口层增加校验,用ID做基础校验,比如说id<0的请求直接拦截

2、对于缓存和数据库都不存在的数据,可以将键值对设置为key-null,存活时间设置短一些,可以防止用户用同一个ID在短时间内发起的暴力访问。

缓存击穿

概念

缓存击穿是指在缓存中没有找到数据但是数据库中存在数据,使得高并发访问同一个数据时大量的请求直接去访问数据库,对数据库造成巨大的压力

解决方案

1、设置热点数据永不过期

2、后台设置一个定时任务,定时的刷新缓存中的数据

3、检查更新

4、加锁

  • 在获取数据的方法上加锁,可以避免大量请求同时去获取数据,可以避免缓存击穿,但是在数据正常存在时,由于加锁的缘故使得效率较低
  • 在从数据库获取数据的代码上加锁,在缓存正常时不会影响效率,但是缓存失效后,请求还是会访问数据库,由于有锁,会造成阻塞
  • 在从数据库获取数据的代码上加锁,但是在访问数据库之前要求在访问一次缓存,双重判断,在第一个请求访问数据库后,后续请求虽然还是阻塞状态,但是会从缓存中获得数据
  • 用互斥锁解决上面的问题

 

缓存雪崩

概念

缓存雪崩是指缓存中的数据的key值在某一个时间段大量过期,导致请求都去访问数据库,造成数据库的压力过大。

与缓存击穿的区别在于:缓存击穿是大量请求访问同一个数据

                                       缓存雪崩是大量不同请求访问不同的数据

不过两者都是要去访问数据库。

解决方法

1、设置热点数据永不过期

2、将数据的过期时间错开设置,可以设置为随机值,防止大量的key在同一个时间过期

3、分布式部署的话可以将不同的热点数据布置在不同的缓存中

 

 

 

 

 

 

 

 

 

 

 

 

相关文章: