《Redis系列第一篇、redis入门一篇就够了|CSDN创作打卡》

目录

一、Redis概述

二、Redis安装

Linux版本下载地址:

【windows】版本下载地址:

三、文件介绍与基本使用

redis.windows.conf主要配置详解

reids服务端

reids压测工具

reids客户端

aof文件校验、修复功能

四、Redis五种数据结构

         String

Hash

List

Set

Sorted-Set

五、Redis核心原理

Redis单线程为什么还能这么快

Redis单线程为何能处理那么多的并发客户端连接

总结:


一、Redis概述

Redis是一个开源(遵循BSD协议)Key-Value数据结构的内存存储系统,用作数据库、缓存和消息代理。它支持5种数据结构:字符串string、哈希hash、列表list、集合set和有序的集合sorted-set。Redis支持Lua脚本,哨兵机制和集群实现高可用。适用场景:缓存、投票、抽奖、分布式session、排行榜、计数、队列、发布订阅等;

二、Redis安装

Linux版本下载地址:

https://redis.io/download

【windows】版本下载地址:

Releases · microsoftarchive/redis · GitHub

点击【3.2.100】

选择下载【Redis-x64-3.2.100.zip】版本

直接下载即可

 

解压内容:

 

 内容列表

三、文件介绍与基本使用

redis.windows.conf主要配置详解

参数解释
bind指定 Redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
port监听端口,默认6379
timeout设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接
daemonize默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
loglevellog等级分为4级,debug, verbose, notice, 和 warning。生产环境下一般开启notice
logfile配置log文件地址,默认使用标准输出,即打印在命令行终端的窗口上
savesave <seconds> <changes>比如save 60 10000意思60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化rdb)
dbfilenamerdb文件的名称
dir数据目录,2种持久化rdb、aof文件就在这个目录
replicaofreplicaof <masterip> <masterport>:该配置是主从的配置表示该redis实例是masterip:masterport的从节点
masterauthmaster连接密码
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-periodslave根据指定的时间间隔向master发送ping请求。默认10秒
repl-timeout同步的超时时间
repl-disable-tcp-nodelay是否在slave套接字发送SYNC之后禁用 TCP_NODELAY
repl-backlog-size设置数据备份的backlog大小
repl-backlog-ttlslave断开开始计时多少秒后,backlog缓冲将会释放
replica-priorityslave的优先级,当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到磁盘

reids服务端

redis-server.exe

点击【redis-server.exe】启动【redis】服务

请保持执行状态:

在执行状态下再进行其它测试。

reids压测工具

redis-benchmark.exe

重新在【redis】的安装目录打开一个【cmd】

redis-benchmark -q -n 100000

分别测试如下命令:
(1) PING_INLINE
(2) PING_BULK
(3) SET:将字符串值value关联到key;
(4) GET:返回key所关联的字符串值,如果key存储的值不是字符串类型,返回一个错误;
(5) INCR:将key中存储的数字值增一。不能转换为数字则报错;
(6) LPUSH:将一个或多个值value插入到列表key的表头;
(7) RPUSH:将一个或多个值value插入到列表key的表尾;
(8) LPOP:移除并返回列表key的头元素;
(9) RPOP:移除并返回列表key的尾元素;
(10) SADD:将一个或多个member元素加入到集合set当中,已经存在于集合的member元素将被忽略;
(11) SPOP:移除并返回集合中的一个随机元素;
(12) LPUSH:将一个或多个value插入到列表key的表头;
(13) LRANGE_100:返回列表key中指定区间内的元素,前100条元素;
(14) LRANGE_300:返回列表key中指定区间内的元素,前300条元素;
(15) LRANGE_500:返回列表key中指定区间内的元素,前500条元素;
(16) LRANGE_600:返回列表key中指定区间内的元素,前600条元素;
(17) MSET:同时设置一个或多个key-value对,value为字符串。

其实从这里就可以看到我的计算机性能了,其实很一般啊。

稍微好一些性能的能跑到10万以上,这里主要看【SET】和【GET】,个人喜欢用【INCR】,所以一般买电脑看性能行不行我就下载一个【Redis】的【windows】版本,跑一下。

reids客户端

redis-cli.exe

点击【redis-cli.exe】启动【redis】客户端

可以输入【keys *】看看现在里面有啥

keys *

看看这三个默认的内容都是什么: 

aof文件校验、修复功能

redis-check-aof.exe

服务器可能在程序正在对 AOF 文件进行写入时停机, 如果停机造成了 AOF 文件出错(corrupt), 那么 Redis 在重启时会拒绝载入这个 AOF 文件, 从而确保数据的一致性不会被破坏。

这时候可以使用可以先使用 Redis 附带的 redis-check-aof 程序,对原来的 AOF 文件进行修复,进而再启动redis

redis-check-aof --fix AOF文件

四、Redis五种数据结构

String

字符串操作

SET      key  value                            //设置字符串键值对
MSET     key  value [key value ...]            //批量设置字符串键值对
SETNX    key  value                            //设置字符串键值对,当key存在就不做处理直接返回0,否则跟set命令一样
GET      key                                   //获取一个字符串键值
MGET     key  [key ...]                        //批量获取字符串键值
DEL      key  [key ...]                        //删除一个键
EXPIRE   key  seconds                          //设置一个键的过期时间(秒)

原子操作

INCR     key                                    //将key中储存的数字值加1
DECR     key                                    //将key中储存的数字值减1
INCRBY   key  increment                         //将key所储存的值加上increment
DECRBY   key  decrement                         //将key所储存的值减去decrement

Hash

常用操作

HSET     key  field  value                       //设置哈希表key中的字段field的值设为value
HSETNX   key  field  value                       //设置哈希表key中的字段field的值设为value,当key存在不做处理,返回0,否则跟hset命令一样
HMSET    key  field  value [field value ...]     //批量设置哈希表key中的字段field的值设为value
HGET     key  field                              //获取哈希表key对应的field字段的值
HMGET    key  field  [field ...]                 //批量获取哈希表key中多个field字段的值
HDEL     key  field  [field ...]                 //删除哈希表key中的field字段
HLEN     key                                     //返回哈希表key中field的数量
HGETALL  key                                     //返回哈希表key中所有的键值
HINCRBY  key  field  increment                   //为哈希表key中field键的值加上增量increment

List

常用操作

LPUSH   key  value [value ...]                   //将一个或多个值value插入到key列表的表头(最左边)
RPUSH   key  value [value ...]               //将一个或多个值value插入到key列表的表尾(最右边)
LPOP    key                             //移除并返回key列表的头元素
RPOP    key                             //移除并返回key列表的尾元素
LRANGE  key  start  stop                   //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
BLPOP   key  [key ...]  timeout                  //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待
BRPOP   key  [key ...]  timeout                  //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待

Set

常用操作

SADD         key  member  [member ...]            //往集合key中存入元素,元素存在则忽略,key不存在则新建
SREM         key  member  [member ...]            //从集合key中删除元素
SMEMBERS     key                                  //获取集合key中所有元素
SCARD        key                                  //获取集合key的元素个数
SISMEMBER    key  member                          //判断member元素是否存在于集合key中
SRANDMEMBER  key  [count]                         //从集合key中选出count个元素,元素不从key中删除
SPOP         key  [count]                         //从集合key中选出count个元素,元素从key中删除

运算操作

SINTER       key  [key ...]                       //交集运算
SINTERSTORE  destination  key  [key ..]           //将交集结果存入新集合destination中
SUNION       key  [key ..]                        //并集运算
SUNIONSTORE  destination  key  [key ...]          //将并集结果存入新集合destination中
SDIFF        key  [key ...]                       //差集运算
SDIFFSTORE   destination  key  [key ...]          //将差集结果存入新集合destination中

Sorted-Set

常用操作

ZADD         key score member [[score member]...]  //往有序集合key中加入带分值元素
ZREM         key member [member ...]               //从有序集合key中删除元素
ZSCORE       key member                            //返回有序集合key中元素member的分值
ZINCRBY      key increment member                  //为有序集合key中元素member的分值加上increment 
ZCARD        key                                   //返回有序集合key中元素个数
ZRANGE       key start stop [WITHSCORES]           //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE    key start stop [WITHSCORES]           //倒序获取有序集合key从start下标到stop下标的元素

运算操作

ZUNIONSTORE  destkey numkeys key [key ...]         //并集计算
ZINTERSTORE  destkey numkeys key [key ...]         //交集计算

五、Redis核心原理

Redis单线程为什么还能这么快

Redis所有的数据都是在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗的问题。正因为Redis是单线程,所以要小心使用Redis指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。

Redis单线程为何能处理那么多的并发客户端连接

Redis的IO多路复用:redis利用epoll(epoll 是Linux内核中的一种可扩展IO事件处理机制)来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。

总结:

Redis是一个Key-Value数据结构的内存存储系统,他支持5种数据结构,分别是String结构、Hash结构、List结构、Set结构、Sorted-Set结构;单线程高效处理内存除数,在windows下运行效率远低于Linux中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小雨下雨的雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值