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:
1)volatile-lru -> 根据LRU算法删除设置过期时间的key
2)allkeys-lru -> 根据LRU算法删除任何key
3)volatile-random -> 随机移除设置过过期时间的key
4)allkeys-random -> 随机移除任何key
5)volatile-ttl -> 移除即将过期的key(minor TTL)
6)noeviction -> 不移除任何key,只返回一个写错误

maxmemory-samples
设置样本量的个数

appendonly
是否开启AOF,如果开启那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性,aof的文件内容就是RESP协议

appendfilename
AOF文件名(默认:"appendonly.aof")

appendfsync
配置 Redis 多久才将数据 fsync 到磁盘一次
Redis支持三种不同的模式:
1)no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
2)always:每次写操作都立刻写入到aof文件。慢,但是最安全。
3)everysec:每秒写一次。折中方案。

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的核心原理。

原文地址:https://www.cnblogs.com/toby-xu/p/11715704.html

时间: 2024-10-12 00:09:27

Redis系列(一):Redis简介的相关文章

redis系列之redis是什么

一.简介 REmote DIctionary Server(Redis),redis是一个基于内存的单机key/value系统,类似memcached,但支持value为多种形式,包括:字符串(string).链表(list).集合(set).有序集合(sorted set)和hash table 二.特点 1 优点 与memcache和MySQL等类似产品比较,Redis有以下几个优点: (1) 非常丰富的数据结构,且这些数据结构的常见操作均是原子性的: (2) 高速读写.Memcached提

Redis系列一 Redis安装

Redis系列一    Redis安装 1.安装所使用的操作系统为Ubuntu16.04 Redis版本为3.2.9 软件一般下载存放目录为/opt,以下命令操作目录均为/opt [email protected]:/opt# wget http://download.redis.io/releases/redis-3.2.9.tar.gz [email protected]:/opt# tar -zxvf redis-3.2.9.tar.gz [email protected]:/opt/re

10.【Redis系列】Redis的高级应用-GeoHash

原文:10.[Redis系列]Redis的高级应用-GeoHash Redis在3.2版本增加了GEO模板,意味着通过redis可以做附近的人,附近的门店,附近的商场这样的功能. 用数据库来算附近的人 地图元素的位置数据使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],纬度正负以赤道为界,北正南负,经度正负以本初子午线 (英国格林尼治天文台) 为界,东正西负.比如掘金办公室在望京 SOHO,它的经纬度坐标是 (116.48105,39.996794),都是正数

1.【Redis系列】redis是可以做什么?

原文:1.[Redis系列]redis是可以做什么? Redis是互联网技术领域使用最为广泛的存储中间件.它以其超高的性能.完美的文档.简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评.国内外很多大型网站都在使用Redis,比如Twitter.Youporn.Github.腾讯.阿里.京东.华为等等,很多小型公司也在应用. Redis可以做什么呢 Redis的应用非常广泛,我们梳理下redis可以用在哪些方面. 1.记录帖子的点赞数.评论数和点击数 2.记录用户帖子ID的列表,便于快速

5.【Redis系列】Redis的高级应用-位图

原文:5.[Redis系列]Redis的高级应用-位图 假设一个应用场景:我们需要记录用户一年的签到记录,签到了是1,没签是0,记录365天,当用户上亿后,存储空间是惊人的. 为了解决这个问题,redis提供了位图的数据结构.这样每天的签到记录只占据一个位,365天就是365个位,46个字节完全可以容纳下. 位图不是特殊的数据结构,它的内容就是普通的字符串,也就是byte数组,我们可以用set/get方法来设置和获取位图的内容,也可以使用位图操作getbit和setbit将byte数组看成位数组

7.【Redis系列】Redis的高级应用-布隆过滤器

原文:7.[Redis系列]Redis的高级应用-布隆过滤器 拿今日头条来说,它会不停的给我们推荐新的新闻,每次推荐都要去重,过滤掉我们之前看过的内容,今日头条如何做到去重呢,我们上面的HyperLogLog虽然能去重,但是没有办法确认这个新闻有没有被浏览 过,没有pfcontains的方法.有没有更好的解决方案呢? Redis为我们准备了布隆过滤器,是专门用来解决这种去重问题的,它在起去重功能的同时,空间上还可以节约90%,只是稍微有一定的误判率. 什么是布隆过滤器 布隆过滤器可以理解为稍微不

9.【Redis系列】Redis的高级应用-漏斗限流

原文:9.[Redis系列]Redis的高级应用-漏斗限流 漏斗限流是最常用的限流方法之一,顾名思义,这个算法的灵感源于漏斗(funnel)的结构. image.png 漏斗的容量是有限的,如果将漏嘴堵住,然后一直往里面灌水,它就会变满,直至再也装不进去.如果将漏嘴放开,水就会往下流,流走一部分之后,就又可以继续往里面灌水.如果漏嘴流水的速率大于灌水的速率,那么漏斗永远都装不满.如果漏嘴流水速率小于灌水的速率,那么一旦漏斗满了,灌水就需要暂停并等待漏斗腾空. 所以,漏斗的剩余空间就代表着当前行为

8.【Redis系列】Redis的高级应用-简单限流

原文:8.[Redis系列]Redis的高级应用-简单限流 限流在分布式系统中是一个经常被提到的话题,如果当前系统的能力,不足以承受那么大的访问量的时候,那么我们就要阻止外来请求对系统继续施压 实现简单限流 首先我们来看一个常见的简单限流策略,系统要限制每个用户在一定时间内的某个行为只能操作N次,如何是用redis的数据结构来实现这个限流的功能呢. 解决方案 这个限流需求中存在一个滑动时间窗口,想想 zset 数据结构的 score 值,是不是可以通过 score 来圈出这个时间窗口来.而且我们

6.【Redis系列】Redis的高级应用-HyperLogLog

原文:6.[Redis系列]Redis的高级应用-HyperLogLog 老规矩还是先假设一个场景:比如京东的商品详情页,如果需要你来统计每天的UV数据,你会如何实现? 如果是PV就好办了,直接给每个网页增加一个计时器,每个网页增加一个日期,这样一进来incrby一次,最终可以计算出每天的统计所有的PV数据. 但是UV就不一样了,每一个用户进来多次每天也只能算一个UV.无论是登录用户还是未登录用户,都需要给一个唯一的ID来标识. 有可能你已经想到了通过set集合去重的功能,为每一个页面创建一个s

4.【Redis系列】Redis的高级应用-延时队列

原文:4.[Redis系列]Redis的高级应用-延时队列 我们习惯于用rabbitmq和kafka作为消息中间件,来给应用之间增加异步的能力.但是使用过的同学都知道,使用专业的消息中间件使用起来非常复杂,我们实现一个简单的功能都需要大量的操作.有了redis,可以让我解脱出来,使用redis可以非常轻松的搞定,Redis的消息队列不是专业的消息中间件,没有非常高级的特性,如果对消息的可靠性有极高的追求,那么redis的消息中间件可能不适合. 异步消息队列 Redis的列表可以用来处理消息队列,