简介

介绍

①开源的key-value存储系统,操作都是原子性的,支持不同方式的排序

②Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,在此基础上实现了master-slave(主从复制)

③默认windows不支持,有window团队将linux文件修改为window可安装版本

应用

①配合关系型数据库做高速缓存

②利用多样的数据结构存储特定的数据
最新数据(List)、排行榜(zset)、时效性数据(验证码,Expire)、计数器(原子性)、
去除重复数据(Set)、构建队列(list)、发布订阅消息系统(pub/sub)

单线程+多路IO复用技术

①多路复用:使用一个线程来检查多个文件描述符(Socket)的就绪状态,如调用select和poll
函数、传入多个文件描述符,若有一个文件描述符就绪则返回,否则阻塞到超时。得到就绪状
态后进行真正的操作,可以在同一个线程里执行,也可启动线程执行。

②阻塞IO:发送请求等待

③非阻塞IO:一直发送请求

④IO多路复用(select、poll、epoll):找一个线路替代,自身可以去处理其他事情

⑤select:每次响应都询问,且监视量有限(1024)

⑥poll:每次响应都询问,监视量无限

⑦epoll:标记每次请求,产生对应响应时通知

Ps:处理并发:串行 – 多线程+锁(memcached)-- 单线程+多路IO复用(Redis)



配置

数据库

默认十六个数据库(0~15),默认使用1号库

所有的库统一密码管理、无用户

配置文件信息(redis.conf)

配置

效果

include

单独建立一个文件修改配置,可通过include引入

bind

ip地址的绑定,想远程访问,必须将bind 注释掉,并将protected-mode yes 改为no

tcp-backlog

①一次请求到达后至接受进程处理前的队列所允许存在的个数

②backlog队列总和=未完成三次握手队列+已完成三次握手队列

③高并发环境下tcp-backlog设置值 跟超时时限内的Redis吞吐量决定

timeout

空闲客户端维持多少秒会关闭,0表永不关闭

TCP keepalive

访问客户端的心跳检测(官方推荐60s)

daemonize

是否设置后台开启

pidfile

存放pid文件位置,每一个实例产生一个不同的pid文件

log level

日志级别、四个级别(debug、verbose、notice、warning)

logfile

日志文件名称

syslog

是否将Redis日志输送到linux系统日志服务中

syslog-ident

日志的标志

syslog-facility

输出日志的设备

database

设定库的数量,默认16

security

①在客户端设置密码:config set requirepass “”,需通过auth 密码重新连接,重启服务会失效

②配置文件永久密码:requirepass 密码

maxclient

客户端最大连接数

maxmemory

设置redis可以使用的内存量,达到上限按照规则maxmeory-policy进行移除,若无法移除或设置不允许移除,会报错

Maxmemory-policy

移除规则:

volatile-lru:使用LRU算法移除,只对设置了过期时间的键

allkeys-lru:使用LRU算法(最近最少使用)移除

volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键

allkeys-random:移除随机的key

volatile-ttl:移除那些TTL值最小的key

noeviction:不进行移除,针对写操作,报错

Maxmemory-samples

设置样本数量,LRU和TTL算法都不精确,一般设置为3~7的数字,会消耗性能

常用命令

命令

效果

select 序号

修换库

set key value

添加数据

get key

提取数据

keys *

查询当前数据库中所有键

exists key

判断某个键是否存在(1/0)

type key

查看键对应的value类型

del key

删除某个键

expire key seconds

为键值对(已存在)设置过期时间

ttl key

查看还有多少秒过期,-1表永不过期,-2代表已过期

dbsize

查看当前数据库的key的数量

flushdb

清空当前库

flushall

通杀全部库