Redis的安装和使用

 

目录

安装

上传安装文件

解压安装

安装Redis

修改配置

Redis服务器操作命令

Redis命令

入门

添加jar包依赖

String类型示例

Hash示例

List示例

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

缓存穿透

概念

解决方法

缓存击穿

概念

解决方案

缓存雪崩

概念

解决方法


安装

上传安装文件

解压安装

1、解压

tar -zxvf  redis-5.0.5.tar.gz

2、删除安装包

rm -f redis-5.0.5.tar.gz

这一步随意

3、修改Redis文件目录名称

安装Redis

两个操作  1、make  2、 make install

修改配置

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

vim redis.conf

1、关闭IP绑定

2、关闭保护模式

3、开启后台启动

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-valueset username admin
get根据key获取数据get username
strlen根据key获取值的长度strlen key
exists判断key是否存在exists name 返回1存在 0不存在
del删除redis中的keydel key
Keys用于查询符合条件的keykeys * 查询redis中全部的key keys n?me 使用占位符获取数据 keys nam* 获取nam开头的数据
mset赋值多个key-valuemset 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自动加1incr key
decr自动减1decr 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元素的值为 valueLSET key index value

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

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

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

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

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

4、事务控制

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类型示例

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

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

Hash示例

List示例

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

缓存穿透

概念

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

解决方法

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

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

缓存击穿

概念

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

解决方案

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

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

3、检查更新

4、加锁

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

 

缓存雪崩

概念

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

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

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

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

解决方法

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值