理解Redis

一、说到redis,你最先想到的是什么?

什么是redis、redis的数据类型、持久化机制、过期键的删除策略、redis为什么这么快、内存相关的知识、线程模型、事务、集群方案、分区、分布式、缓存异常?

1.什么是redis

redis是高性能、非关系型、键值对数据库;
redis的key是String类型,value有多种类型();

比较mysql和redis的特性:

功能redismysql
读取速度ns级别ms级别
持久化AOF和RDB
原子性单线程支持不支持,需要特殊处理
主从复制支持支持
占用资源内存硬盘

2.redis为什么之么快

​ redis是基于内存操作的,数据保存在内存中,类似于HashMap,它的查找和操作时间复杂度是O(1);

​ redis的数据结构简单,是经过特意设计的,如:String、List、Set、Zset、Hash等数据类型,可以在特定的场景下使用,还有每种数据类型的本地方法

​ redis是单线程的,避免不必要的上下文切换和竞争条件,不用考虑各种加锁、释放锁、死锁的问题;

redis通过多路I/O复用,非阻塞模型

​ redis直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求

3.redis数据结构与使用场景

redis-server.exe redis.window.config

redis-cli.exe -h localhost -p 6379

二、redis的持久化

两种方式:RDB(Redis DataBase 快照),AOF(Append-only file)机制:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-es7DF9SR-1585636753281)(C:\Users\ZJson\AppData\Local\Temp\1583376834035.png)]

三、redis的过期键删除策略

一般的过期策略有三种:定时过期,惰性过期,定期过期

  1. 定时过期:每个key有个定时器,到过期时间就会立即清除;对内存大小友好,但会占用大量CUP,影响吞吐量和缓存的响应时间;
  2. 惰性过期:只有当key被访问时,才判断是否过期,过期删除;对内存不友好,节约大量CUP资源;
  3. 定期过期:每隔一段时间,扫描一定数量数据库的expires字典的一定数量的key,判断是否过期;

redis使用惰性过期和定期过期策略。

四、内存的淘汰机制有哪些

当redis的内存不足时:

对全局的键所采取的淘汰机制有:noeviction ,allkeys-lru, allkeys-random;

  1. noeviction: 写入新key时,保存;
  2. allkeys-lru:移除使用最少的key;
  3. allkeys-random:随机移除key。

对过期性键有:volatile-lru 、volatile-random 、volatile-ttl

  1. volatile-lru:移除最少使用的key;
  2. volatile-random:随机移除key;
  3. volatile-ttl:离过期时间最近的key优先移除。

五、redis的线程模型

https://www.cnblogs.com/barrywxx/p/8570821.html

六、分布式锁

  1. 命令:SETNX(set if not exists)

SETNX lock-key order11

  1. 官方推荐的RedLock

七、缓存异常

  1. 缓存雪崩:同一时间缓存key大批量失效,导致请求落到数据库上,造成数据库承受压力而崩掉;

    解决:1. 设置key的失效时间为随机时间。

  2. 缓存穿透:缓存和数据库中都没有的数据,导致请求落在数据库上,造成数据库承受压力而崩掉;

    解决:1. 接口校验参数;2.当查询到数据库没有值时,为该key设置一个null值。

  3. 缓存击穿:缓存中没有,数据库有数据,一般是过期时间到了,用户大量访问该数据,导致请求落在数据库上;

    解决:1.热点数据永不过期;2.数据库设置互斥锁。

缓存预热、缓存降级、热点数据和冷数据、

1.下载redis:
linux直接下载:wget http://download.redis.io/releases/redis-5.0.5.tar.gz
官网下载,上传到linux:https://redis.io/download
百度云盘:链接:https://pan.baidu.com/s/1eX8RIeNbUXhj9NAHW1H2CA 提取码:n1qo
guthub:github https://github.com/antirez/redis
2.解压并进入目录:
tar xzvf redis-5.0.5.tar.gz && cd redis-5.0.5 
Redis是c语言开发的,需要c语言的编译环境。如果没有gcc需要在线安装,命令:yum install gcc-c++
3.编译:
make 
4.在usr/local下创建文件夹:
mkdir /usr/local/redis 
5. 安装:
cd redis-5.0.5/src
make install PREFIX=/usr/local/redis 
6. 移动配置文件到etc下:
 mv redis.conf /usr/local/redis/etc 
7.设置配置文件:

在vim编辑模式下,输入行数+gg可以快捷跳行。例如跳到第138行,输入:138gg

编辑配置文件:vim  /usr/local/redis/etc/redis.conf
后台启动:将第138行的daemonize no修改为daemonize yes;
远程访问:将第70行的bind注释,第90行将protected-mode改为no;
设置密码:取消第502行的注释,并修改密码: requirepass mytest;
开机启动:
vi /etc/rc.local //在里面添加内容:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (意思就是开机调用这段开启redis的命令)。
环境变量设置:vim /etc/profile
			添加: export REDIS_HOME=/usr/local/redis
				  export PATH=$PATH:$REDIS_HOME/bin
8.Redis服务的常用命令
启动: bin/redis-server  ../etc/redis-config
停止:bin/redis-cli shutdown 或者 
	查询出redis的pid,再kill其进程 ps -ef|grep redis kill pid
9.通过"install_server.sh"来安装服务
执行脚本:/redis-5.0.5/utils/install_server.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qRvnmlQ6-1585636753282)(C:\Users\ZJson\AppData\Local\Temp\1583414557033.png)]

到6379.conf配置远程访问、后台启动、修改密码;

/etc/init.d/redis_6379:端口为6379的redis服务启动脚本。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值