当前位置:首页 > 数据库 > 正文内容

Redis

邻居的猫1个月前 (12-09)数据库1595

Redis概念和根底

Redis是一种支撑key-value等多种数据结构的存储体系。可用于缓存,事情发布或订阅,高速行列等场景。支撑网络,供给字符串,哈希,列表,行列,调集结构直接存取,依据内存,可耐久化。

什么是Redis

Redis是一款内存高速缓存数据库。支撑key-value存储体系,支撑丰厚的数据类型,如:string,list,set,zset,hash

可用于缓存,事情发布和订阅,高速行列,分布式锁等场景

用c言语开发,效率高

为什么运用Redis

  • 读写功用优异
  • 数据类型丰厚
  • 原子性
  • 丰厚的特性
  • 耐久化
  • 发布订阅
  • 分布式

Redis下载与装置

下载地址: Redis中文网

Windows版

只需将紧缩包解压到对应的文件夹即可

发动: 直接点击redis-server.exe敞开redis即可

linux版

  1. 将Redis装置包传到linux中

  2. 解压装置包

    tar -zxvf redis-4.0.0.tar.gz -C /usr/local

  3. 装置Redis的依靠环境gcc

    yum install gcc-c++

  4. 进入/usr/local/redis-4.0.0目录,进行编译

    # 进入目录 cd /usr/local/redis-4.0.0

    敞开编译 make

  5. 进入Redis的src目录,进行装置

    # 进入src目录 cd src

    进行装置 make install

发动与中止

  1. 运用Redis-server发动,默许端口号为6379

    # 进入目录

    cd /usr/local/redis-4.0.0/src

    发动

    ./redis-server

  2. 衔接服务

    这时咱们的页面应该是Redis体系界面,咱们需求重开一个页面进行Redis操作

    咱们经过cli衔接服务

    进入目录

    cd /usr/local/redis-4.0.0/src

    衔接服务

    ./redis-cli

    检查数据

    keys *

    能够运用Ctrl+C退出体系

    Ctrl+C

  3. 封闭Redis服务

    # 查找Redis服务器进程号

    ps -ef|grep redis

    封闭进程

    kill -9 进程号

Redis装备

方位:坐落Redis装置目录下,文件名为redis.conf

检查装备

能够经过CONFIG指令检查或设置装备项

语法:

Redis config 指令格局如下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

redis 127.0.0.1:6379> CONFIG GET loglevel
 
1) "loglevel"
2) "notice"

运用*号能够获取一切装备项

redis 127.0.0.1:6379> CONFIG GET *
 
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""
  7) "unixsocket"
  8) ""
  9) "logfile"
 10) ""
 11) "pidfile"
 12) "/var/run/redis.pid"
 13) "maxmemory"
 14) "0"
 15) "maxmemory-samples"
 16) "3"
 17) "timeout"
 18) "0"
 19) "tcp-keepalive"
 20) "0"
 21) "auto-aof-rewrite-percentage"
 22) "100"
 23) "auto-aof-rewrite-min-size"
 24) "67108864"
 25) "hash-max-ziplist-entries"
 26) "512"
 27) "hash-max-ziplist-value"
 28) "64"
 29) "list-max-ziplist-entries"
 30) "512"
 31) "list-max-ziplist-value"
 32) "64"
 33) "set-max-intset-entries"
 34) "512"
 35) "zset-max-ziplist-entries"
 36) "128"
 37) "zset-max-ziplist-value"
 38) "64"
 39) "hll-sparse-max-bytes"
 40) "3000"
 41) "lua-time-limit"
 42) "5000"
 43) "slowlog-log-slower-than"
 44) "10000"
 45) "latency-monitor-threshold"
 46) "0"
 47) "slowlog-max-len"
 48) "128"
 49) "port"
 50) "6379"
 51) "tcp-backlog"
 52) "511"
 53) "databases"
 54) "16"
 55) "repl-ping-slave-period"
 56) "10"
 57) "repl-timeout"
 58) "60"
 59) "repl-backlog-size"
 60) "1048576"
 61) "repl-backlog-ttl"
 62) "3600"
 63) "maxclients"
 64) "4064"
 65) "watchdog-period"
 66) "0"
 67) "slave-priority"
 68) "100"
 69) "min-slaves-to-write"
 70) "0"
 71) "min-slaves-max-lag"
 72) "10"
 73) "hz"
 74) "10"
 75) "no-appendfsync-on-rewrite"
 76) "no"
 77) "slave-serve-stale-data"
 78) "yes"
 79) "slave-read-only"
 80) "yes"
 81) "stop-writes-on-bgsave-error"
 82) "yes"
 83) "daemonize"
 84) "no"
 85) "rdbcompression"
 86) "yes"
 87) "rdbchecksum"
 88) "yes"
 89) "activerehashing"
 90) "yes"
 91) "repl-disable-tcp-nodelay"
 92) "no"
 93) "aof-rewrite-incremental-fsync"
 94) "yes"
 95) "appendonly"
 96) "no"
 97) "dir"
 98) "/home/deepak/Downloads/redis-2.8.13/src"
 99) "maxmemory-policy"
100) "volatile-lru"
101) "appendfsync"
102) "everysec"
103) "save"
104) "3600 1 300 100 60 10000"
105) "loglevel"
106) "notice"
107) "client-output-buffer-limit"
108) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
109) "unixsocketperm"
110) "0"
111) "slaveof"
112) ""
113) "notify-keyspace-events"
114) ""
115) "bind"
116) ""

修正装备

能够经过修正redis.conf文件 或 CONFIG set 指令来修正装备

语法

CONFIG SET 指令根本语法:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

实例

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"OKredis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel"2) "notice"

参数阐明:

redis.conf 装备项阐明如下:

  1. Redis默许不是以看护进程的办法运转,能够经过该装备项修正,运用yes启用看护进程

daemonize no

  1. 当Redis以看护进程办法运转时,Redis默许会把pid写入/var/run/redis.pid文件,能够经过pidfile指定

pidfile /var/run/redis.pid

  1. 指定Redis监听端口,默许端口为6379,作者在自己的一篇博文中解说了为什么选用6379作为默许端口,由于6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的姓名

port 6379

  1. 绑定的主机地址

bind 127.0.0.1

5.当客户端搁置多长时刻后封闭衔接,假如指定为0,表明封闭该功用

timeout 300

  1. 指定日志记载等级,Redis一共支撑四个等级:debug、verbose、notice、warning,默许为verbose

loglevel verbose

  1. 日志记载办法,默许为规范输出,假如装备Redis为看护进程办法运转,而这儿又装备为日志记载办法为规范输出,则日志将会发送给/dev/null

logfile stdout

  1. 设置数据库的数量,默许数据库为0,能够运用SELECT <dbid>指令在衔接上指定数据库id

databases 16

  1. 指定在多长时刻内,有多少次更新操作,就将数据同步到数据文件,能够多个条件合作

save <seconds> <changes>

Redis默许装备文件中供给了三个条件:

save 900 1

save 300 10

save 60 10000

别离表明900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

  1. 指定存储至本地数据库时是否紧缩数据,默许为yes,Redis选用LZF紧缩,假如为了节约CPU时刻,能够封闭该选项,但会导致数据库文件变的巨大

rdbcompression yes

  1. 指定本地数据库文件名,默许值为dump.rdb

dbfilename dump.rdb

  1. 指定本地数据库寄存目录

dir ./

  1. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis发动时,它会主动从master进行数据同步

slaveof <masterip> <masterport>

  1. 当master服务设置了暗码保护时,slav服务衔接master的暗码

masterauth <master-password>

  1. 设置Redis衔接暗码,假如装备了衔接暗码,客户端在衔接Redis时需求经过AUTH <password>指令供给暗码,默许封闭

requirepass foobared

  1. 设置同一时刻最大客户端衔接数,默许无约束,Redis能够一起翻开的客户端衔接数为Redis进程能够翻开的最大文件描绘符数,假如设置 maxclients 0,表明不作约束。当客户端衔接数抵达约束时,Redis会封闭新的衔接并向客户端回来max number of clients reached错误信息

maxclients 128

  1. 指定Redis最大内存约束,Redis在发动时会把数据加载到内存中,抵达最大内存后,Redis会先测验铲除已到期或行将到期的Key,当此办法处理 后,依然抵达最大内存设置,将无法再进行写入操作,但依然能够进行读取操作。Redis新的vm机制,会把Key寄存内存,Value会寄存在swap区

maxmemory <bytes>

  1. 指定是否在每次更新操作后进行日志记载,Redis在默许情况下是异步的把数据写入磁盘,假如不敞开,或许会在断电时导致一段时刻内的数据丢掉。由于 redis自身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时刻内只存在于内存中。默许为no

appendonly no

  1. 指定更新日志文件名,默许为appendonly.aof

appendfilename appendonly.aof

  1. 指定更新日志条件,共有3个可选值:

    no:表明等操作体系进行数据缓存同步到磁盘(快)

    always:表明每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)

    everysec:表明每秒同步一次(折衷,默许值)

appendfsync everysec

  1. 指定是否启用虚拟内存机制,默许值为no,简略的介绍一下,VM机制将数据分页寄存,由Redis将拜访量较少的页即冷数据swap到磁盘上,拜访多的页面由磁盘主动换出到内存中(在后边的文章我会仔细分析Redis的VM机制)

vm-enabled no

  1. 虚拟内存文件途径,默许值为/tmp/redis.swap,不行多个Redis实例同享

vm-swap-file /tmp/redis.swap

  1. 将一切大于vm-max-memory的数据存入虚拟内存,不管vm-max-memory设置多小,一切索引数据都是内存存储的(Redis的索引数据 便是keys),也便是说,当vm-max-memory设置为0的时分,其实是一切value都存在于磁盘。默许值为0

vm-max-memory 0

  1. Redis swap文件分成了许多的page,一个目标能够保存在多个page上面,但一个page上不能被多个目标同享,vm-page-size是要依据存储的 数据巨细来设定的,作者主张假如存储许多小目标,page巨细最好设置为32或许64bytes;假如存储很大大目标,则能够运用更大的page,假如不 确认,就运用默许值

vm-page-size 32

  1. 设置swap文件中的page数量,由于页表(一种表明页面闲暇或运用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。

vm-pages 134217728

  1. 设置拜访swap文件的线程数,最好不要超越机器的核数,假如设置为0,那么一切对swap文件的操作都是串行的,或许会构成比较长时刻的推迟。默许值为4

vm-max-threads 4

  1. 设置在向客户端应对时,是否把较小的包合并为一个包发送,默许为敞开

glueoutputbuf yes

  1. 指定在超越必定的数量或许最大的元素超越某一临界值时,选用一种特别的哈希算法

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

  1. 指定是否激活重置哈希,默许为敞开(后边在介绍Redis的哈希算法时详细介绍)

activerehashing yes

  1. 指定包括其它的装备文件,能够在同一主机上多个Redis实例之间运用同一份装备文件,而一起各个实例又具有自己的特定装备文件

include /path/to/local.conf

HyperLogLog

HyperLogLog 是用来做基数核算的算法

长处:

在输入元素的数量或体积十分十分大时,核算基数所需的空间总是固定的,而且很小的。

在 Redis 里边,每个 HyperLogLog 键只需求花费 12 KB 内存,就能够核算挨近 2^64 个不同元素的基 数。这和核算基数时,元素越多消耗内存就越多的调集构成鲜明对比。

可是,由于 HyperLogLog 只会依据输入元从来核算基数,而不会贮存输入元素自身,所以 HyperLogLog 不能像调集那样,回来输入的各个元素。

什么是基数?

比方数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估量便是在差错可接受的范围内,快速核算基数。

Redis HyperLogLog 指令

序号 指令及描绘
1 PFADD key element [element ...](https://www.redis.net.cn/order/3629.html) 增加指定元素到 HyperLogLog 中。
2 PFCOUNT key [key ...](https://www.redis.net.cn/order/3630.html) 回来给定 HyperLogLog 的基数预算值。
3 PFMERGE destkey sourcekey [sourcekey ...](https://www.redis.net.cn/order/3631.html) 将多个 HyperLogLog 合并为一个 HyperLogLog

发布订阅

Redis 发布订阅(pub/sub)是一种音讯通讯方式:发送者(pub)发送音讯,订阅者(sub)接纳音讯。

Redis 客户端能够订阅恣意数量的频道。

下图展现了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的联系:

image-20241106120308099

当有新音讯经过 PUBLISH 指令发送给频道 channel1 时, 这个音讯就会被发送给订阅它的三个客户端:

image-20241106120327986

Redis 发布订阅指令

序号 指令及描绘
1 PSUBSCRIBE pattern [pattern ...](https://www.redis.net.cn/order/3632.html) 订阅一个或多个契合给定方式的频道。
2 PUBSUB subcommand [argument argument ...]检查订阅与发布体系状况。
3 PUBLISH channel message 将信息发送到指定的频道。
4 PUNSUBSCRIBE [pattern pattern ...] 退订一切给定方式的频道。
5 SUBSCRIBE channel [channel ...](https://www.redis.net.cn/order/3636.html) 订阅给定的一个或多个频道的信息。
6 UNSUBSCRIBE [channel channel ...] 指退订给定的频道。

业务

Redis业务能够一次履行多个指令,而且带有以下两个重要的确保:

业务是一个独立的阻隔操作:业务中的一切指令都会序列化,按次序地履行。业务在履行过程中,不会被其他客户端发送来的指令恳求所打断

业务是一个原子操作

一个业务从开端到履行会阅历以下三个阶段:

  • 开端业务
  • 指令入队
  • 履行业务

业务指令

序号 指令及描绘
1 DISCARD 撤销业务,抛弃履行业务块内的一切指令
2 EXEC 履行业务块内的指令
3 MULTI 符号一个业务块的开端
4 UNWATCH 撤销WATCH指令对一切key的监督
5 WATCH key [key ....] 监督一个(或多个)key,假如在业务履行之前这个(或这些)key被其他指令所改动,那么业务将被打断

实例

以下是一个业务的比如, 它先以 MULTI 开端一个业务, 然后将多个指令入队到业务中, 最后由 EXEC 指令触发业务, 一起履行业务中的一切指令:

redis 127.0.0.1:6379> MULTI
OK
 
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
 
redis 127.0.0.1:6379> GET book-name
QUEUED
 
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
 
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
 
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

数据备份与康复

备份

Redis SAVE指令用于创立当时数据库的备份,该指令将在Redis装置目录中创立dump.rdb

语法:

redis 127.0.0.1:6379> SAVE 
OK

康复

假如需求康复数据,只需将备份文件 (dump.rdb) 移动到 redis 装置目录并发动服务即可。获取 redis 目录能够运用 CONFIG 指令,如下所示:

redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"

以上指令 CONFIG GET dir 输出的 redis 装置目录为 /usr/local/redis/bin。

Bgsave

创立 redis 备份文件也能够运用指令 BGSAVE,该指令在后台履行。

127.0.0.1:6379> BGSAVE
 
Background saving started

安全

能够经过Redis的装备文件设置暗码参数,这样客户端衔接到Redis服务就需求暗码验证,这样能够让你的Redis服务更安全

能够经过以下指令检查是否设置了暗码验证:

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

默许情况下requirepass参数是空的,这就意味着你无需经过暗码验证就能够衔接到Redis服务

能够经过以下指令来修正参数:

127.0.0.1:6379> CONFIG set requirepass "w3cschool.cc"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "w3cschool.cc"

设置暗码后,客户端衔接 redis 服务就需求暗码验证,不然无法履行指令。

语法

AUTH 指令根本语法格局如下:

127.0.0.1:6379> AUTH password

127.0.0.1:6379> AUTH "w3cschool.cc"
OK
127.0.0.1:6379> SET mykey "Test value"
OK
127.0.0.1:6379> GET mykey
"Test value"

功用测验

Redis 功用测验是经过一起履行多个指令完成的。

语法

redis 功用测验的根本指令如下:

redis-benchmark [option] [option value]

redis 功用测验东西可选参数如下所示:

序号 选项 描绘 默许值
1 -h 指定服务器主机名 127.0.0.1
2 -p 指定服务器端口 6379
3 -s 指定服务器 socket
4 -c 指定并发衔接数 50
5 -n 指定恳求数 10000
6 -d 以字节的方式指定 SET/GET 值的数据巨细 2
7 -k 1=keep alive 0=reconnect 1
8 -r SET/GET/INCR 运用随机 key, SADD 运用随机值
9 -P 经过管道传输 <numreq> 恳求 1
10 -q 强制退出 redis。仅显现 query/sec 值
11 --csv 以 CSV 格局输出
12 -l 生成循环,永久履行测验
13 -t 仅运转以逗号分隔的测验指令列表。
14 -I Idle 方式。仅翻开 N 个 idle 衔接并等候。

实例

以下实例一起履行 10000 个恳求来检测功用:

redis-benchmark -n 100000
 
PING_INLINE: 141043.72 requests per second
PING_BULK: 142857.14 requests per second
SET: 141442.72 requests per second
GET: 145348.83 requests per second
INCR: 137362.64 requests per second
LPUSH: 145348.83 requests per second
LPOP: 146198.83 requests per second
SADD: 146198.83 requests per second
SPOP: 149253.73 requests per second
LPUSH (needed to benchmark LRANGE): 148588.42 requests per second
LRANGE_100 (first 100 elements): 58411.21 requests per second
LRANGE_300 (first 300 elements): 21195.42 requests per second
LRANGE_500 (first 450 elements): 14539.11 requests per second
LRANGE_600 (first 600 elements): 10504.20 requests per second
MSET (10 keys): 93283.58 requests per second

实例

以下实例咱们运用了多个参数来测验 redis 功用:

redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q
 
SET: 146198.83 requests per second
LPUSH: 145560.41 requests per second

以上实例中主机为 127.0.0.1,端口号为 6379,履行的指令为 set,lpush,恳求数为 10000,经过 -q 参数让成果只显现每秒履行的恳求数。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=580

标签: 中间件技术
分享给朋友:

“Redis” 的相关文章

在云上轻松布置达梦数据库

在云上轻松布置达梦数据库

达梦数据库(DM Database)是由达梦数据库有限公司开发的一款联系型数据库办理体系(RDBMS)。作为国内抢先的数据库产品,达梦数据库在政府、金融、动力、电信、交通、医疗、教育等多个职业得到广泛运用,尤其在触及国家安全、中心事务体系、重要信息办理等范畴,达梦数据库凭仗其安稳性和安全性,赢得了广...

oracle切换用户, 使用SQLPlus切换用户

oracle切换用户, 使用SQLPlus切换用户

在Oracle数据库中,你可以使用`ALTER SESSION SET`命令来切换用户。这个命令可以改变当前会话的用户,但需要注意的是,你必须在具有适当权限的情况下才能切换到其他用户。以下是一个简单的例子,演示如何使用`ALTER SESSION SET`命令来切换用户:```sqlALTER SE...

oracle视频,深入浅出Oracle数据库基础教程——从入门到实践

1. 最全Oracle视频教程全集 链接: 简介: 该系列共计46条视频,内容涵盖Oracle学习路线分析、Oracle软件安装准备工作等。适合初学者系统学习Oracle数据库。2. Oracle教程_全套Oracle从入门到精通教程 链接: 简介: 这可能是B站上讲解最...

大数据培训哪里有,大数据培训哪里有?全方位指南助你选择合适机构

大数据培训哪里有,大数据培训哪里有?全方位指南助你选择合适机构

1. 尚硅谷 尚硅谷是一家在大数据课程培训领域有多年经验的教育机构,提供高质量的大数据培训课程,包括大数据开发培训课程,旨在为企业输送大量大数据工程师人才。详情请访问。2. 阿里云开发者社区 阿里云提供的大数据学习路线,涵盖了从基础概念到高级开发工具的学习内容,适合初学者和进阶学习者。详...

数据库的主要特点,链嶅姟涓嶅彲鐢怎么读

数据库(Database)是计算机系统中用于存储、管理和检索数据的软件系统。它有以下几个主要特点:1. 数据结构化:数据库中的数据按照一定的数据模型进行组织,使得数据具有结构化、规则化的特点,便于计算机处理。2. 数据共享:数据库允许多个用户或应用程序同时访问和操作数据,实现了数据的共享。3. 数据...

大数据评分低,揭秘大数据评分低的原因及恢复方法

大数据评分低,揭秘大数据评分低的原因及恢复方法

大数据评分低的原因及解决方法主要包括以下几个方面: 原因1. 频繁申请网贷:频繁申请网贷会导致大数据评分降低,特别是当申请次数过多且未能及时还款时。2. 逾期记录:逾期还款是大数据信用评分降低的主要原因之一。3. 高负债率:负债率过高会增加信用风险,从而影响大数据评分。4. 缺乏信用记录:没有经常使...