Redis系列(一):Redis简介
一、Redis概述
Redis是一个开源(遵循BSD协议)Key-Value数据结构的内存存储系统,用作数据库、缓存和消息代理。它支持5种数据结构:字符串string、哈希hash、列表list、集合set和有序的集合zset。Redis支持Lua脚本,哨兵机制和集群实现高可用。适用场景:缓存、投票、抽奖、分布式session、排行榜、计数、队列、发布订阅等;具体介绍见Redis官网。
二、Redis安装
① 下载地址:https://redis.io/download
② 安装gcc:yum install gcc

③ 把第一步下载好的redis‐5.0.2.tar.gz上传到服务器的/root/svr/packages目录或者直接 cd /root/svr/packages然后执行:wget http://download.redis.io/releases/redis-5.0.2.tar.gz

④ 执行 cp redis‐5.0.2.tar.gz ../

⑤ cd /root/svr 然后执行:tar -xvf redis‐5.0.2.tar.gz:

cd redis‐5.0.2:

⑥ 执行:make install PREFIX=/root/svr/redis-5.0.2

⑦ 启动redis 执行:bin/redis-server ../redis.conf (注意:如果要后台启动需要把redis.conf配置里面的daemonize改为yes)

⑧ 验证是否启动成功 ps -ef|grep redis

⑨ 进去redis客户端:bin/redis-cli

⑩ 退出客户端:quit

三、redis.conf主要配置详解
| 参数 | 解释 |
| bind | 指定 Redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求 |
| port | 监听端口,默认6379 |
| timeout | 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接 |
| daemonize | 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes |
| loglevel | log等级分为4级,debug, verbose, notice, 和 warning。生产环境下一般开启notice |
| logfile | 配置log文件地址,默认使用标准输出,即打印在命令行终端的窗口上 |
| save | save <seconds> <changes>比如save 60 10000意思60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化rdb) |
| dbfilename | rdb文件的名称 |
| dir | 数据目录,2种持久化rdb、aof文件就在这个目录 |
| replicaof | replicaof <masterip> <masterport>:该配置是主从的配置表示该redis实例是masterip:masterport的从节点 |
| masterauth | master连接密码 |
| replica-serve-stale-data |
当slave跟master失去连接或者正在同步数据,slave有两种运行方式: 1) 如果replica-serve-stale-data设置为yes(默认设置),slave会继续响应客户端的请求。 2) 如果replica-serve-stale-data设置为no,除去指定的命令之外的任何请求都会返回一个错误”SYNC with master in progress” |
| replica-read-only | 是否设置slave只读 |
| repl-diskless-sync | 同步策略: 磁盘或socket,默认磁盘方式 |
| repl-diskless-sync-delay | 如果非磁盘同步方式开启,可以配置同步延迟时间,以等待master产生子进程通过socket传输RDB数据给slave。默认值为5秒,设置为0秒则每次传输无延迟 |
| repl-ping-replica-period | slave根据指定的时间间隔向master发送ping请求。默认10秒 |
| repl-timeout | 同步的超时时间 |
| repl-disable-tcp-nodelay | 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY |
| repl-backlog-size | 设置数据备份的backlog大小 |
| repl-backlog-ttl | slave断开开始计时多少秒后,backlog缓冲将会释放 |
| replica-priority | slave的优先级,当master挂了,优先级数字小的salve会优先考虑提升为master,0作为一个特殊的优先级,标识这个slave不能作为master |
| requirepass | 客户端在处理任何命令时都要密码验证 |
| rename-command | 命令重命名,可以给危险命令改变名字 |
| maxclients | 设置最多同时连接的客户端数量,默认这个限制是10000个客户端。 |
| maxmemory | 设置最大内存,一旦内存使用达到最大内存,redis会根据选定的回收策略(maxmemmory-policy)删除key |
| maxmemory-policy |
最大内存策略:如果达到内存限制了,redis如何选择删除key: |
| maxmemory-samples |
设置样本量的个数 |
| appendonly |
是否开启AOF,如果开启那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性,aof的文件内容就是RESP协议 |
| appendfilename |
AOF文件名(默认:"appendonly.aof") |
| appendfsync |
配置 Redis 多久才将数据 fsync 到磁盘一次 |
| auto-aof-rewrite-percentage |
自动重写AOF文件。如果AOF日志文件增大到指定百分比,默认100。Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件 |
| auto-aof-rewrite-min-size |
自动重写AOF文件。如果AOF日志文件到达最小的指定大小,默认64mb |
| aof-use-rdb-preamble |
Redis 4.0之后配置混合持久化,需要配置 aof-use-rdb-preamble yes |
| lua-time-limit |
Lua脚本的最大执行时间,单位为毫秒 |
| cluster-enabled |
是否开启集群 cluster-enabled yes |
| cluster-config-file |
redis自动生成集群配置信息的文件名 |
| cluster-node-timeout |
集群节点超时毫秒数。超时的节点将被视为不可用状态。 |
| aof-rewrite-incremental-fsync |
当一个子进程重写AOF文件时,如果配置aof-rewrite-incremental-fsync yes,则文件每生成32M,数据会被同步 |
| rdb-save-incremental-fsync |
当redis保存RDB文件时,如果启用了以下选项,每生成32MB数据,文件将被fsync到磁盘 |
四、Redis核心数据结构

五、Redis核心原理
1、Redis单线程为什么还能这么快
Redis所有的数据都是在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗的问题。正因为Redis是单线程,所以要小心使用Redis指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。
2、Redis单线程为何能处理那么多的并发客户端连接
Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。(IO多路复用在后续的netty系列里面详细讲解)
总结:Redis是一个Key-Value数据结构的内存存储系统,他支持5种数据结构,分别是String结构、Hash结构、List结构、Set结构、Zset结构;Redis支持Lua脚本,哨兵机制和集群实现高可用;介绍了安装Redis的步骤,详细的解释了redis.conf的主要配置,以及Redis的核心原理。
Redis系列(一):Redis简介的更多相关文章
- Redis系列(一):Redis的简介与安装
原文链接(转载请注明出处):Redis系列(一):Redis的简介与安装 什么是 Redis Redis 是一个使用ANSI C 编写的开源.支持网络协议.基于内存.可选持久性的键值对数据库,它是一个 ...
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- Redis系列一 Redis安装
Redis系列一 Redis安装 1.安装所使用的操作系统为Ubuntu16.04 Redis版本为3.2.9 软件一般下载存放目录为/opt,以下命令操作目录均为/opt root@ubunt ...
- redis系列之1----redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- redis系列:redis介绍与安装
前言 这个redis系列的文章将会记录博主学习redis的过程.基本上现在的互联网公司都会用到redis,所以学习这门技术于你于我都是有帮助的. 博主在写这个系列是用的是目前最新版本4.0.10,虚拟 ...
- 深入剖析Redis系列: Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- Redis系列之----Redis的两种持久化机制(RDB和AOF)
Redis的两种持久化机制(RDB和AOF) 什么是持久化 Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望 ...
- 【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构
redis 是使用 C 语言编写的,但是 C 语言是没有字典这个数据结构的,因此 C 语言自己使用结构体来自定义一个字典结构 typedef struct redisDb src\server.h 中 ...
- redis系列之redis是什么
一.简介 REmote DIctionary Server(Redis),redis是一个基于内存的单机key/value系统,类似memcached,但支持value为多种形式,包括:字符串(str ...
- Redis系列(三)-Redis发布订阅及客户端编程
阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易 ...
随机推荐
- Hive入门--2.分区表 外部分区表 关联查询
1.查看mysql中metastore数据存储结构 Metastore中只保存了表的描述信息(名字,列,类型,对应目录) 使用SQLYog连接itcast05 的mysql数据库 查看hive数据库 ...
- (六十九)c#Winform自定义控件-垂直滚动条
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- Day 24 定时任务
1.什么是crond crond 就是计划任务,类似于我们平时生活中的闹钟,定点执行. 2.计划任务时间管理 1.Crontab配置文件记录了时间周期的含义 vim /etc/crontab * 表示 ...
- Linux常用命令(常用)
一,Linux常用命令二,CentOS没有盘符,只有根目录/,可以理解为只有一个盘有一个文件夹有点特殊,画了一个房子,代表当前用户的家 1.记住一个点:区分根目录和当前用户的家cd ~ 代表回家cd ...
- docker的使用---创建新的镜像(通过修改容器,个人练手理解过程记录,不推荐使用)
docker基础命令 ##列出docker客户端命令 docker docker container --help ##显示docker的版本和信息 docker --version docker v ...
- 自定义构建基于.net core 的基础镜像
先说一个问题 首先记录一个问题,今天在用 Jenkins 构建项目的时候突然出现包源的错误: /usr/share/dotnet/sdk/2.2.104/NuGet.targets(114,5): e ...
- Dubbo学习系列之十三(Mycat数据库代理)
软件界有只猫,不用我说,各位看官肯定知道是哪只,那就是大名鼎鼎的Tomcat,现在又来了一只猫,据说是位东方萌妹子,暂且认作Tom猫的表妹,本来叫OpencloudDB,后又改名为Mycat,或许Ca ...
- 链表-LinkList
什么是链表 维基百科:链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存 ...
- Linux mint 启动文本模式(不启动图形界面)
Linux Mint 系统用了很久,很顺手,赞一个! 有一天想同时运行多个虚拟机linux系统做实验,想着只启动文本模式可以省点内存资源,结果试了多种方法都不成功,网上现有针对Ubuntu原版和Cen ...
- shell 获取当前目录下的jar文件
1.示例 function getDir() { ` do fileName=$"/"$item if [ -d $fileName ] then echo $fileName&q ...