redis常用命令

redis常用命令

#redis切换命令
select 3
#获取值
get keyname
#查看当前库大小
dbsize
#查看所有的key
keys *
#清空当前库
flushdb
#清楚所有的库
flushall
#判断某个值是否存在
exists key
#移动数据到第一个库
move key 1
#设置一个数据的过期时间
EXPIRE key
#查看数据待过期时间
ttl key
#查看类型
type key

redis是单线程

C语言写的,基于内存操作。cpu不是redis的性能瓶颈。瓶颈是网络和内存。
redis是将所有的数据全部放在内存中操作,单线程效率高,多线程会涉及到cpu上下文的切换

redis五大数据类型

String类型
	[
		#设置值
		set key1 0
		#获取值
		get key1 
		#追加到key1值里(append)
		APPEND key1 "hello"
		#获取长度(strlen)
		STRLEN  key1
		#自增1
		incr key1
		#自减1
		decr key 1
		#步长,即每次增加的长度
		INCRBY key1 10
		#步长,即每次减少的长度
		DECRBY  key1 5
 		#获取字符串的部分值[0,3]
		GRETRANGE key1 0 3
		#替换值
		get key2
		 "abcdefg"
		SETRANGE key2 1 xx
		 "axxdefg"
	]
hash
list
set

Rdb详解

#配置文件里的rdb规则触发机制
1.save的规则满足后触发
2.执行fulshall命令触发
3.退出redis会触发
#如何恢复rdb数据
1.把rdb文件放到redis的dir目录启动即可
#rdb的优点
1.适合大规模的数据恢复
2.对数据的完整性要求不高
#rdb的缺点
1.需要一定的时间间隔,如果redis机器意外关机最近修改的数据则会丢失。
2.fork进程的时候,会占用一定的内存空间。
rdb文件在主从复制里是备用的

Aof详解

#默认不开启
appendonly no 改为yes
#aof文件重写规则,即大于64m则会再fork一个新进程
auto-aof-rewrite-min-size 64mb
#如果aof文件有错误则启动不了redis,则可以使用redis-check-aof修复aof文件
redis-check-aof  --fix appendonly.aof
#然后aof文件就恢复正常了,重启服务就可以恢复了
#aof优点
1.每次修改都会同步,文件完整性更好
2.每秒同步一次,则会丢失一秒的数据
3.从不同步,效率最高
#aof缺点
1.相对于rdb的小大,aof文件的大小更大,修复速度更慢
2.aof的运行效率比rdb文件慢,所以redis的默认是rdb
#同时开启两种持久化
同时开启两种持久化,当redis重启会优先载入aof文件恢复原始数据,因为通常情况下aof要比rdb保存的完整。rdb的数据不实时,同时使用时服务器重启只会找aof。
建议:使用rdb,因为rdb更适用于备份数据库,快速重启,而且不会有aof的潜在bug

redis的发布和订阅
订阅端

SUBSCRIBE kuangshenshuo #订阅一个kuangshenshuo频道

在这里插入图片描述

发送端

PUBLPUBLISH kuangshenshuo "发送的消息"

在这里插入图片描述
原理
在这里插入图片描述
适用场景

  1. 实时信息系统
  2. 实时聊天
    主从配置
!!!!!默认情况下每台redis都是主节点

在这里插入图片描述

同一台机器安装需要修改如下配置
1.首先拷贝三份配置文件
2.端口
3.pid名字
4.dump.rdb名字

在这里插入图片描述
这种是临时的,永久的需要在配置文件里指定

#从节点解开如下配置
replicaof masterip masterport
#如果有密码则需要在如下配置设置
masterauth masterpassword
**细节**
1.主节点才可以写,从节点不可以写,从节点只可以读
2.主节点断开了[即服务停止了],从机依旧连接主机,但是没有写操作,这个时候主节点启动了,从节点已经可以读到主节点的信息。
3. 如何是在命令行里建立的主从,重启后就失效了,再次变成master,但是从手动到加入就又可以读到数据了。

原理制远离
在这里插入图片描述
谋权篡位

从节点执行  replication on one就可以成为主节点,其他从节点会自动连接到这里,此模式用于哨兵还没时使用,因为当是一主两从或一主多从主节点出现问题是无法写入数据的

哨兵集群

https://www.cnblogs.com/guangwenyin/p/15772266.html

Redis缓存穿透、缓存雪崩和缓存击穿

**缓存穿透**
缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中,请求都会压到数据库[redis和mysql],从而压垮数据库。比如用户一个不存在的用户id获取用户信息.
**解决方法**
1.对空值缓存:如果一个查询返回的数据为空(不管数据是否存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟。
2.设置可访问的白名单:使用bitmaps;类型定义一个可以访问的名单,名单id作为bitmaps的偏移量,每次访问和bitmaps里面的id进行比较,如果访问id不在bitmaps里面,进行拦截,不允许访问。
3.采用布隆过滤器:布隆过滤器(Bloom Filter)是由Howard Bloom在1970年提出的一种比较巧妙的概率型数据结构,它可以告诉你某种东西一定不存在或者可能存在。当布隆过滤器说,某种东西存在时,这种东西可能不存在;当布隆过滤器说,某种东西不存在时,那么这种东西一定不存在。 布隆过滤器相对于Set、Map 等数据结构来说,它可以更高效地插入和查询,并且占用空间更少,它也有缺点,就是判断某种东西是否存在时,可能会被误判。但是只要参数设置的合理,它的精确度也可以控制的相对精确,只会有小小的误判概率
**缓存击穿**
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力(有点像一把尖刀瞬间击穿到数据库)
它和缓存穿透的区别在于:缓存击穿是指缓存中没有但数据库中有的数据,由于并发用户特别多,同时读缓存没读到数据,同时数据库取数据引起数据库压力瞬间增大,造成过大压力。缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起的数据特别大而不存在的数据
**解决方法**
1.预先设置热门数据:在redis高峰访问前,把一些热门数据提前存入redis中,加大这些热门数据key的时长实时调整 现场监控哪些数据是热门数据,实时调整key的过期时长。
2.使用分布式锁: 就是在缓存失效的时候(判断拿出来的值为空),不是立即去查数据库,先使用缓存工具的某些带成功操作返回值的操作。比如redis的setnx去set一个mutex key,当操作返回成功时(分布式锁),在查数据库,并回设缓存,最后删除mutex key
当操作返回失败,证明有线程在查询数据库,当前线程睡眠一段时间在重s试整个get缓存的方法
**雪崩**
缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
常见缓存雪崩出现原因:1、redis服务器挂掉了。2、对缓存数据设置了相同的过期时间,导致某时间段内缓存集中失效。
**解决方法**
1.构建多级缓存架构:nginx缓存+redis缓存+其他缓存(ehcache等)
2.使用锁或队列:使用锁或在队列的方式来保证不会有大量的线程对数据库进行读写,从而避免失效时大量的并发请求到底层存储系统上,不适用高并发情况。
3.设置过期标志更新缓存:记录缓存数据是否过期(设置提前量),如果过期会触发通知另外的线程在后台去更新实际key的缓存。
4.将缓存失效时间分散开:设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值