当前位置:   article > 正文

Redis数据库安装与使用_reached the max retries per request limit (which i

reached the max retries per request limit (which is 1). refer to "maxretries

基础

Redis 是键值对(Key-Value)存储数据库,数据存储在内存中,读写速度非常快,每秒可以处理超过10万次读写操作,广泛应用于缓存,也经常用来做分布式锁

redis中文官方网站:http://www.redis.cn/download.html

Redis 是一个客户端服务端的程序

  • 服务端提供数据存储等等服务
  • 客户端连接服务端并通过向服务端发送命令,读取或写入数据,简单来说,客户端就是某种工具,我们通过它与 Redis 服务端进行通讯并完成数据操作。

配置文件

因为需要redis的配置文件,这里最好还是去redis的官方去下载一个redis使用里面的配置文件即可
注意:不能在配置项的后面加注释

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1

#允许远程访问
#bind 127.0.0.1   
bind 0.0.0.0
 #关闭保护模式
protected-mode no 

port 6379
tcp-backlog 511
requirepass    #redis密码,设置为空,取消密码
timeout 0
tcp-keepalive 300   #防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300
daemonize no   #用守护线程的方式启动
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes  #redis持久化  默认是no
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

运用场景

    1. 缓存:Redis 最常见的应用场景是作为缓存,用于提高应用程序的性能和响应速度。它可以将频繁读写的数据存储在内存中,以减少数据库访问的次数和延迟。
    1. 会话存储:Redis 可以用于存储会话数据,例如用户登录状态、购物车数据等。它可以将这些数据存储在内存中,以提高应用程序的性能和可伸缩性。
    1. 消息队列:Redis 还可以用作消息队列,用于处理异步任务、事件通知等。它支持发布/订阅模式和队列模式,可以快速传递大量消息,并保证消息的可靠性和顺序性。
    1. 计数器和排行榜:Redis 支持多种数据结构,例如字符串、列表、哈希表和有序集合等。其中,有序集合非常适合实现计数器和排行榜等功能。
    1. 地理位置应用:Redis 支持地理位置数据类型,可以用于存储地理位置信息,并支持快速查询和计算地理位置之间的距离和方向。
    1. 分布式锁:Redis 还可以用于实现分布式锁,用于控制并发访问。它提供了原子性操作和多种数据结构,可以很容易地实现分布式锁。

总之,Redis 是一种高性能、灵活和多功能的键-值存储系统,适用于多种应用场景,特别是需要处理高并发、低延迟和大量数据的应用程序。

安装 Redis服务端

docker中

docker安装 Redis

Docker学习

# 要确保docker环境已经安装成功
docker --version

docker search redis

#拉取最新版本
docker pull redis

#查看端口
netstat -anp |grep 6379  

redis-server  #这个是关键配置,让redis按照这个redis.conf的配置启动

docker run --name myredis -p 6379:6379 \
-v /app/redis.conf:/usr/local/etc/redis/redis.conf \
-v /app/redis/data:/data \
--restart=always \
-d redis:latest redis-server /usr/local/etc/redis/redis.conf

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
docker start 容器名或容器id


# 查看运行中的容器
docker ps

# 进入redis容器并启动一个redis交互式会话
docker exec -it redis容器名 /bin/bash
# 在redis交互式会话中连接 redis 服务
redis-cli

#或者直接进入
docker exec -it redis容器名 redis-cli

# 清理容器(停止 docker-redis 容器并删除):

docker stop redis容器名
docker rm redis容器名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

docker-compose

version: '3' #设置docker compose 版本
services:
  #设置services
  redis:
    image: redis #镜像名称
    container_name: redis #容器名称
    restart: always #重启docker引擎后该容器也重启
    privileged: true # 获取宿主机root权限
    ports:
      - 6379:6379 #本地端口号与容器内部端口号
    volumes:
      #指定挂载目录
      - ./data:/data
      - ./redis.conf:/etc/redis/redis.conf
    command: [ "redis-server", "/etc/redis/redis.conf" ] # 指定配置文件启动redis-server进程



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

创建redis.conf

# Redis默认端口
port 6379
bind 0.0.0.0
# 关闭保护模式,允许远程连接
protected-mode no

# 密码
requirepass 123456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
docker-compose up -d
  • 1

window下使用

安装

下载地址:https://github.com/tporadowski/redis/releases

#启动redis服务
redis-server.exe
  • 1
  • 2

这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。

#启动redis客户端,连接本机6379端口(127.0.0.1)raw参数避免中文乱码
redis-cli  --raw
127.0.0.1:6379>
shutdown
exit
  • 1
  • 2
  • 3
  • 4
  • 5
#在远程服务上执行命令
 redis-cli -h host -p port -a password
  • 1
  • 2

配置文件启动

redis-server.exe redis.windows.conf
  • 1
  1. 这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。
    切换到 redis 目录下运行:
redis-cli.exe -h 127.0.0.1 -p 6379
  • 1

发生了错误。MaxRetriesPerRequestError: Reached the max retries per request limit (which is 20). Refer to “maxRetriesPerRequest” option for details.

redis命令

Commands | Redis


redis-cli  #在redis交互式会话中连接 redis 服务

config get requirepass  #查看现有的redis密码

config set requirepass pass_123456 #设置redis密码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可视化客户端

AnotherRedisDesktopManager 一款比较稳定简洁的 redis UI 工具。

Redis Client 是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用

Redis Desktop Manager:

  • Redis Desktop Manager是一个功能强大的Redis图形化客户端,提供可视化界面来管理和操作Redis数据库。
  • 它支持Windows、Mac和Linux操作系统,并提供多种功能,如查看键值对、执行命令、监控性能指标等。

RedisInsight(官方)

  • RedisInsight是Redis Labs官方提供的免费的Redis可视化和管理工具。
  • 它提供一个直观的界面,可以查看和编辑键值对、执行命令、监控性能指标、查看慢查询等。

https://redislabs.com/redis-enterprise/redis-insight/

FastoRedis

  • FastoRedis是一个跨平台的Redis数据可视化工具,支持Windows、Mac和Linux等操作系统。
  • 它提供了直观的界面,可以浏览和编辑键值对、执行Lua脚本、导入和导出数据等功能。

Redis Commander(web)

  • Redis Commander是一个开源的Web界面,用于管理Redis数据库。
  • 它具有易于使用的界面,并提供基本的管理功能,如查看键值对、执行命令和监控性能指标。

QuickRedis

QuickRedis 是一款 永久免费 的 Redis 可视化管理工具。

先创建目录,再创建连接

tiny-rdm

https://github.com/tiny-craft/tiny-rdm

⭐️ 支持 macOS、Windows 和 Linux
⭐️ 基于 Webview,无内嵌浏览器
⭐️ 更精美的界面和直观的结构布局
⭐️ 便捷的数据查看和编辑修改
⭐️ 多国语言支持

redis数据结构

  1. String:字符串类型
  2. List:列表类型
  3. Set:无序集合类型
  4. ZSet:有序集合类型
  5. Hash:哈希表类型

String:

  • 是二进制安全,可以存储图片或者序列化的对象,值最大存储为512m
  • 使用:set key value ,get key
  • 应用场景:共享session,分布式锁,计数器,限流
  • 内部编码有3种,int(8字节长整型)/embstr(小于等于39字节字符串)/raw(大于39个字节字符串)

List

  • 用来存储多个有序的字符串,一个列表最多可以存储2^32 - 1个元素
  • 内部编码:ziplist(压缩列表)、linkedlist(链表)
  • 应用场景:消息队列,文章列表

Set

  • 用来存储多个字符串,不允许重复元素
  • 内部编码:intset(整数集合),hashtable(哈希表)

zset(有序集合)

  • 已排序的字符串集合,元素不能重复
  • 应用场景:排行榜,社交需求(用户点赞)

Hash

  • 简介:在Redis中,哈希类型是指v(值)本身又是一个键值对(k-v)结构
  • 简单使用举例:hset key field valuehget key field
  • 内部编码:ziplist(压缩列表)hashtable(哈希表)
  • 应用场景:缓存用户信息等。
  • 注意点:如果开发使用hgetall,哈希元素比较多的话,可能导致Redis阻塞,可以使用hscan。而如果只是获取部分field,建议使用hmget。

缓存问题

redis持久化机制

阿里二面:熟悉Redis?讲讲你理解的Redis的持久化机制(RDB、AOF) - 知乎

因为Redis是内存数据库,它将自己的数据存储在内存里面,一旦Redis服务器进程退出或者运行Redis服务器的计算机停机,Redis服务器中的数据就会丢失。

为了避免数据丢失,所以Redis提供了持久化机制,将存储在内存中的数据保存到磁盘中,用于在Redis服务器进程退出或者运行Redis服务器的计算机停机导致数据丢失时,快速的恢复之前Redis存储在内存中的数据。

Redis提供了2种持久化方式,分别为:

  1. RDB持久化
  2. AOF持久化

RDB持久化

RDB持久化是将某个时间点上Redis中的数据保存到一个RDB文件中,该文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时Redis中的数据

RDB持久化也叫做快照持久化。

  • SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求
  • BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求

配置save选项

我们可以手动执行该命令,但还是推荐设置下Redis服务器配置文件的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令。

save 900 1
save 300 10
save 60 10000


  • 1
  • 2
  • 3
  • 4
  • 5

默认的配置条件表示,只要满足以下3个条件中的任意1个,BGSAVE命令就会被执行:

  • 服务器在900s(即15分钟)之内,对数据库进行了至少1次修改
  • 服务器在300s(即5分钟)之内,对数据库进行了至少10次修改
  • 服务器在60s(即1分钟)之内,对数据库进行了至少10000次修改
dbfilename dump.rdb    #RDB文件名称
dir ./   #RDB文件保存路径
  • 1
  • 2

载入RDB文件

载入RDB文件的目的是为了在Redis服务器进程重新启动之后还原之前存储在Redis中的数据。
Redis载入RDB文件并没有专门的命令,而是在Redis服务器启动时自动执行的。

而且,Redis服务器启动时是否会载入RDB文件还取决于服务器是否启用了AOF持久化功能,具体判断逻辑为:

  1. 只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据。
  2. 如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据。
  3. 默认情况下,Redis服务器的AOF持久化功能是关闭的,所以Redis服务器在启动时会载入RDB文件,

服务器状态

创建和载入RDB文件,可能存在的服务器状态有以下3种:

  1. 当执行SAVE命令时,Redis服务器会被阻塞,此时客户端发送的所有命令请求都会被阻塞,只有在服务器执行完SAVE命令,重新开始接受命令请求之后,客户端发送的命令请求才会被处理。
  2. 当执行BGSAVE命令时,Redis服务器不会被阻塞,Redis服务器仍然可以继续处理客户端发送的命令请求。
  3. 服务器在载入RDB文件期间,会一直处于阻塞状态,直到RDB文件载入成功。

AOF持久化

AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库数据的

客户端 发送写命令到 redis服务端
redis服务端 保存被执行的写命令到 aof文件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/679816
推荐阅读
相关标签
  

闽ICP备14008679号