首页 > 数据库 >redis

redis

时间:2023-07-08 17:32:36浏览次数:36  
标签:127.0 cli 0.1 redis 6379 root

Redis

一、redis介绍

  1. Redis是一个缓存数据库,主要是做缓存。用户请求数据时,第一次先请求redis中的数据,redis中没有,再去请求后台数据库
  2. Redis是一种内存型的nosql数据库,一般是用来缓存加速的,并且能够支持数据持久化存储,可以将数据持久化到硬盘中
  3. Redis存储数据的方法是以key-value的形式
  4. Redis数据类型支持字符串、列表、哈希等多种类型

二、redis的编译安装

1、初始化服务器
  1. 关闭防火墙
  2. 关闭selinux
  3. 修改主机名
2、配置阿里源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo >/dev/null 2>&1
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo >/dev/null 2>&1
3. 编译安装redis
  1. 下载redis

    https://download.redis.io/releases/redis-6.2.12.tar.gz

  2. 安装编译安装依赖包
    yum install -y gcc gcc-c++ make openssl openssl-devel cmake
    
  3. 编译安装
    # 上传并解压安装包
    tar -zxvf redis-6.2.12.tar.gz -C /opt/
    
    # 进入redis目录
    cd /opt/redis-6.2.12/
    
    # 编译安装(大约2分钟)
    make && make install
    
  4. 检查安装是否正常
    [root@redis ~]# ll /usr/local/bin/redis-*
    -rwxr-xr-x. 1 root root 4830192 Jul  8 22:45 /usr/local/bin/redis-benchmark
    lrwxrwxrwx. 1 root root      12 Jul  8 22:45 /usr/local/bin/redis-check-aof -> redis-server
    lrwxrwxrwx. 1 root root      12 Jul  8 22:45 /usr/local/bin/redis-check-rdb -> redis-server
    -rwxr-xr-x. 1 root root 5004296 Jul  8 22:45 /usr/local/bin/redis-cli
    lrwxrwxrwx. 1 root root      12 Jul  8 22:45 /usr/local/bin/redis-sentinel -> redis-server
    -rwxr-xr-x. 1 root root 9547888 Jul  8 22:45 /usr/local/bin/redis-server
    
    [root@redis ~]# redis-server -v
    Redis server v=6.2.12 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=709dd565f2229663
    
  5. 拷贝配置文件
    # redis的默认配置文件,之后通过修改,使用配置文件启动redis
    [root@redis redis-6.2.12]# cp redis.conf /etc/
    

ps: 如果系统相同,没必要再每台机器上安装,再一台安装之后,只需将编译好的二进制文件(/usr/local/bin/redis-*)拷贝到其他服务器即可

三、redis的修改配置启动和参数调优

1、修改前拷贝配置文件
[root@redis ~]# cp /etc/redis.conf /etc/redis.conf.bak
2、修改配置文件
# 去除注释和空行
[root@redis ~]# sed -i '^#/d;/^$/d' /etc/redis.conf

# 修改配置文件
bind 0.0.0.0        # 监听地址
port 6379           # 端口号
daemonize yes       # 守护进程方式启动
pidfile "redis.pid" # 进程文件,存放在dir指定的目录中
logfile "redis.log" # 日志文件,存放在dir指定的目录中
dir /data/redis     # 持久化存储目录
requirepass Admin@123   # redis的登录密码
3、启动redis
# 创建dir中指定的目录
[root@redis ~]# mkdir -p /data/redis

# 使用/etc/redis.conf文件启动redis
[root@redis ~]# redis-server /etc/redis.conf
[root@redis ~]# ps -aux | grep redis | grep -v grep
root      23833  0.2  0.4 162516  9864 ?        Ssl  23:24   0:00 redis-server 0.0.0.0:6379
4、调整文件句柄数
# 修改文件句柄数为65535
[root@redis ~]# vim /etc/security/limits.conf 
* - nofile 65535

# 重新连接生效
[root@redis ~]# ulimit -n
65535
5、内核参数调整
# 修改内核参数
[root@redis ~]# vim /etc/sysctl.conf 
net.core.somaxconn = 10240
vm.overcommit_memory = 1

# 刷新生效
[root@redis ~]# sysctl -p
6、重启redis
[root@redis ~]# pkill redis 
[root@redis ~]# redis-server /etc/redis.conf
[root@redis ~]# ps -aux | grep redis | grep -v grep
root      23998  0.1  0.4 162516  9888 ?        Ssl  23:39   0:00 redis-server 0.0.0.0:6379
7、将redis加入到systemd中管理
# 编写systemd文件
vim /usr/lib/systemd/system/redis.service

[Unit]
Description=Redis server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

# 重新加载systemd服务
[root@redis ~]# systemctl daemon-reload

# 启动服务
[root@redis ~]# systemctl enable redis --now
[root@redis ~]# systemctl status redis
● redis.service - Redis server
   Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2023-07-08 23:46:38 CST; 2min 11s ago
 Main PID: 24161 (redis-server)
   CGroup: /system.slice/redis.service
           └─24161 /usr/local/bin/redis-server 0.0.0.0:6379

Jul 08 23:46:38 redis systemd[1]: Starting Redis server...
Jul 08 23:46:38 redis systemd[1]: Started Redis server.

四、redis常用数据类型的基本操作

1、redis-cli客户端登录和认证
  1. 没有密码的redis
    redis-cli       # 默认127.0.0.1:6379
    redis-cli -h IP
    redis-cli -h IP -p PORT
    
  2. 设置密码时
    [root@redis ~]# redis-cli 
    127.0.0.1:6379> AUTH Admin@123
    OK
    127.0.0.1:6379> ping
    PONG
    
    # 或者在连接时指定密码
    [root@redis ~]# redis-cli -a Admin@123
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:6379> ping
    PONG
    
2、Redis的常用数据类型
  1. 字符串
  2. 列表、集合
  3. hash哈希、发布和订阅
3、Redis字符串操作
# 增
127.0.0.1:6379> set user test
OK

# 查
127.0.0.1:6379> get user
"test"

# 改
127.0.0.1:6379> set user test1
OK

# 查
127.0.0.1:6379> get user
"test1"

# 查所有
127.0.0.1:6379> keys *
1) "user"

# 删
127.0.0.1:6379> del user
(integer) 1

ps:命令不区分大小写,但是设置的key:value区分大小写

4、非交互式操作
[root@redis ~]# redis-cli -a Admin@123 set username test
OK
[root@redis ~]# redis-cli -a Admin@123 get username
"test"
[root@redis ~]# redis-cli -a Admin@123 del username
(integer) 1

五、redis的不同库切换和运维监控命令

redis默认有16个数据库,配置文件中的默认配置

1、切换数据库
[root@redis ~]# redis-cli 
127.0.0.1:6379> AUTH Admin@123
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> SELECT 1    # 通过select切换不同的数据库
OK

ps1:数据库从0开始编号,所以select 16会切换不成功
ps2:热痛的数据库数据是独立的
2、redis运维监控命令
  1. 查看key

    # 随机获取一个key
    127.0.0.1:6379> RANDOMKEY
    
    # 查看多有的key
    127.0.0.1:6379> KEYS *
    
    # 每次获取11个key,可以循环获取,职到获取所有key
    127.0.0.1:6379> SCAN 0
    
  2. 监控redis的状态

    # 监控redis状态
    [root@redis ~]# redis-cli -a Admin@123 --stat
    ------- data ------ --------------------- load -------------------- - child -
    keys       mem      clients blocked requests            connections          
    0          855.36K  1       0       21 (+0)             8           
    0          855.36K  1       0       22 (+1)             8           
    0          855.36K  1       0       23 (+1)             8           
    0          855.36K  1       0       24 (+1)             8  
    
    # 监控数据操作
    [root@redis ~]# redis-cli -a Admin@123 monitor
    OK
    1688833553.023944 [0 127.0.0.1:33526] "AUTH" "(redacted)"
    1688833553.024352 [0 127.0.0.1:33526] "set" "username" "test"
    
  3. 查看redis的详细信息

    # 查看全部模块的详细信息
    redis-cli -a Admin@123 info
    
    # 查看单独模块的信息
    redis-cli -a Admin@123 info cluster
    

六、redis配置动态更新

redis有两种更新配置文件的方法

  1. 修改配置文件,重启redis服务才能生效
  2. 实时更新,不需要重启服务
    [root@redis ~]# redis-cli -a Admin@123
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "Admin@123"
    127.0.0.1:6379> config set requirepass admin    # 修改临时生效,重启后失效
    OK
    127.0.0.1:6379> config rewrite          # 使配置写入配置文件,重启仍然有效
    OK
    

七、redis的多用户管理

redis6之后加入了用户管理,默认的超级管理员用户 default

1、查看用户
127.0.0.1:6379> acl list    # 查看用户列表
1) "user default on #8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 ~* &* +@all"
127.0.0.1:6379> acl getuser default # 查看具体用户的详细信息
 1) "flags"
 2) 1) "on"
    2) "allkeys"
    3) "allchannels"
    4) "allcommands"
 3) "passwords"
 4) 1) "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
 5) "commands"
 6) "+@all"
 7) "keys"
 8) 1) "*"
 9) "channels"
10) 1) "*"
2、创建用户
  1. 查看权限列表

    127.0.0.1:6379> acl cat
    1) "keyspace"
    2) "read"
    3) "write"
    4) "set"
    5) "sortedset"
    6) "list"
    7) "hash"
    8) "string"
    9) "bitmap"
    10) "hyperloglog"
    11) "geo"
    12) "stream"
    13) "pubsub"
    14) "admin"
    15) "fast"
    16) "slow"
    17) "blocking"
    18) "dangerous"
    19) "connection"
    20) "transaction"
    21) "scripting"
    
  2. 创建用户

    # 创建普通用户并授予get权限
    127.0.0.1:6379> acl setuser t1 on >123456 ~* +get
    OK
    
    # 参数说明:
    t1      --- 用户名
    123456  --- 密码
    ~*      --- 所有数据
    +get    --- 添加get权限
    
  3. 使用普通用户登录

    [root@redis ~]# redis-cli --user t1 -a 123456
    
3、删除用户
127.0.0.1:6379> acl deluser t1
(integer) 1

ps:如果需要保存创建的用户需要使用config rewrite进行保存

八、redis的慢日志和key的有效期

1、慢日志
  1. 查看慢日志的配置
    127.0.0.1:6379> config get slow*
    1) "slowlog-max-len"
    2) "128"            # 最多记录条数
    3) "slowlog-log-slower-than"
    4) "10000"          # 当命令执行时间超过10S将会记录一条慢日志
    

九、redis禁用危险命令和压测工具

十、redis的两种持久化方式存储

十一、redis的RDB工具分析key的大小

十二、redis的主从复制

十三、redis哨兵实现主从自动切换

十四、redis cluster集群搭建和高可用

十五、redis cluster集群增加和删除节点

标签:127.0,cli,0.1,redis,6379,root
From: https://blog.51cto.com/u_15743393/6662603

相关文章

  • Redis进阶
    Redis1Redis中的数据结构![image-20201204114339215](Redisday02.assets/image-20201204114339215.png)传统键值存储是关联字符串值到字符串键,但是Redis的值不仅仅局限于简单字符串,还可以持有更复杂的数据结构。下面列的是Redis支持的所有数据结构,后面将逐一介绍:String(......
  • 阿里Java三面凉凉:微服务,Redis,JVM一个都搞不懂
    前言:金三银四刚刚过去了,不知道很多小伙伴都拿到自己心仪的offer没有,我这边也收到了一个粉丝投来的消息,说看到阿里的面试真题之后人都是懵的,发现自己一窍不通,下面给大家分享我这个粉丝的经历,以及我在这方面学习的经验。阿里微服务面试真题1.单片,SOA和微服务架构有什么区别?单......
  • 阿里面试官:谈谈对Redis哈希表的理解
    不少朋友问我,能不能搞个八股文精讲,把面试问题讲讲透,于是系列就这样诞生了。咱们第一期先聊聊Redis。相信哈希表大家并不陌生,今天顺便聊聊Redis的哈希表。Hash表回顾哈希表是一种存储数据的结构,它有很多名字(键值对、字典、符号表、映射、关联数组)。在哈希表中,键和值是一一对应的......
  • redis 启动报错oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    1:C07Jul202306:48:05.705#Redisversion=6.0.6,bits=64,commit=00000000,modified=0,pid=1,juststarted1:C07Jul202306:48:05.705#Configurationloaded1:C07Jul202306:49:07.098#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo1:C07Jul2023......
  • 解决pm2重启Redis的具体操作步骤
    PM2重启Redis在开发和部署过程中,我们经常需要使用Redis作为缓存或数据存储。而在生产环境中,Redis的稳定性和高可用性是非常重要的。本文将介绍如何使用PM2来重启Redis,以确保系统的稳定性。什么是PM2?PM2是一个流行的Node.js进程管理器,它帮助我们在生产环境中管理Node.js应用程序......
  • 解决Redis版本选择的具体操作步骤
    Redis版本选择Redis是一个开源的内存数据存储系统,它支持各种数据结构,如字符串、哈希、列表、集合等。在选择使用Redis时,我们需要考虑选择合适的Redis版本,以满足我们的需求并获得最佳的性能和功能。主要Redis版本目前,Redis有两个主要的版本可供选择:Redis2.x和Redis6.x。Redis......
  • 如何实现Redis6.0和以前版本有何不同的具体操作步骤
    Redis6.0和以前版本的不同概述Redis是一个开源的内存数据存储系统,它提供了高性能、可扩展、持久化的数据结构。随着时间的推移,Redis不断进行改进和升级,引入了许多新功能和优化。Redis6.0是最新版本,与以前的版本相比,有一些重要的变化和改进。在本文中,我将向你介绍Redis6.0与以......
  • 解决Redis 设置有效期命令的具体操作步骤
    Redis设置有效期命令实现教程1.整体流程下面是实现Redis设置有效期命令的整体流程。我们将使用Redis的SET命令和EXPIRE命令来设置键的值和有效期。步骤描述1连接到Redis服务器2使用SET命令设置键的值3使用EXPIRE命令设置键的有效期4关闭Redis连接2.......
  • 基于Redis的分布式锁实现方案
    本文介绍基于RedisLUA脚本实现分布式锁的具体方案。为了便于在微服务架构的项目中使用,方案以注解切面的方式实现,可单独提炼项目打成jar包。一、注解核心注解有两个CacheLock和CacheParam。@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documen......
  • python下使用redis分布式锁
    python下使用redis分布式锁1.什么场景需要分布式锁?我们在写业务逻辑的时候,如果多个线程同时访问某个共享变量,一般是对变量进行上锁或者使用queue.Queue()实现,以做到线程安全保证数据不被污染。在单机部署的情况下这样做完全没问题,但是随着业务规模的发展,某些单机部署的系统......