Redis 安装和核心配置


文章目录

  • Redis 安装和核心配置
  • 1、NoSQL介绍和Redis介绍
  • 2、本地缓存和分布式缓存介绍
  • 3、热点key问题简介
  • 4、源码安装Redis6
  • 5、Docker安装 Redis6
  • 6、Redis6 核心配置
  • 7、可视化工具及命名规范
  • 7.1 key命名规范


1、NoSQL介绍和Redis介绍

什么是NoSQL(Not Only SQL)?

  • 是不同于传统的关系数据库的数据库管理系统的统称
  • NoSQL不使⽤SQL作为查询语⾔
  • NoSQL数据存储可以不需要固定的表格模式
  • 存储方式多样,键 - 值对存储,列存储,⽂档存储,图形数据库
  • NoSql类数据库: redis、 memcached、 mongodb、 Hbase

什么是Redis?

官网定义:Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

  • 总的来说是个基于内存的(Key-Value)存储工具,支持多种语言api
  • 高性能:Redis能读的速度是110000次/s,写的速度是 81000次/s ( 不同配置有差别)
  • 内存中的数据结构存储系统,它可以⽤作数据库、缓存和消息中间件。 它⽀持多 种类型的数据结构,如 字符串(strings)、散列(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)等

2、本地缓存和分布式缓存介绍

分布式缓存 :

  • 与应⽤分离的缓存组件或服务,与本地应⽤隔离⼀个独⽴的应⽤,多个应⽤可直接的共享缓存
  • 常⻅的分布式缓存 Redis、 Memcached等

本地缓存:

  • 和业务程序⼀起的缓存,例如myabtis的⼀级或者⼆级缓存,本地缓存⾃然是最快的,但是不能在多个节点共享
  • 常见的本地缓存:
  • myabtis ⼀级缓存、 mybatis⼆级缓存
  • spring框架本身的缓存
  • redis本地单机服务
  • ehcache
  • guava cache
  • Caffeine

选择本地缓存还是分布式缓存?

和业务数据结合去选择 ⾼并发项⽬⾥⾯⼀般都是有本地缓存和分布式缓存共同 存在的 。

3、热点key问题简介

什么是热点Key?

缓存中的某些Key对应的value存储在集群中⼀台机器,使得所有流量涌向同⼀机器,成为系统的瓶颈,⽆法通过增加机器容量来解决 。

热点Key问题产生的原因大致有以下两种

1、用户消费的数据远大于生产的数据(热卖商品、热点新闻、热点评论、明星直播)。

在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件商品被数万次点击浏览或者购买时,会形成一个较大的需求量,这种情况下就会造成热点问题。同理,被大量刊发、浏览的热点新闻、热点评论、明星直播等,这些典型的读多写少的场景也会产生热点问题。

2、请求分片集中,超过单 Server 的性能极限。

在服务端读数据进行访问时,往往会对数据进行分片切分,此过程中会在某一主机 Server 上对相应的 Key 进行访问,当访问超过 Server 极限时,就会导致热点 Key 问题的产生。

热点Key问题会造成什么?

  • 流量集中一台服务器,跑满带宽,成为性能瓶颈
  • 达到物理网卡上线,其他服务无法使用。
  • 请求过多,缓存分片服务被打垮,缓存服务不可用请求就会打到数据库服务上,造成缓存击穿,雪崩。

热点Key解决方案一:

使用本地缓存:避免带宽或者传输影响,本地缓存热点key数据。第一次请求分布式缓存服务器,获取缓存然后缓存到本地,然后每次读请求,将⾸先检查key是否存在于本地缓存中,如果存在则直接返回,如果不存在再去访问分布式缓存的机器 。

解决方案有很多,但都有优缺点,具体的大家自行查资料,这里只是简单说明。

4、源码安装Redis6

安装gcc:安装编译redis6需要升级gcc,默认⾃带的gcc版本⽐较⽼

#安装gcc
yum install -y gcc-c++ autoconf automake
#centos7 默认的 gcc 默认是4.8.5,版本⼩于 5.3 ⽆法编译,需要先安装gcc新版才能编译
gcc -v
#升级新版gcc,配置永久⽣效
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#临时配置环境变量生效
scl enable devtoolset-9 bash
#永久配置环境变量生效
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

将安装包传到linux 服务器上:

#例如 ,我把包放在/usr/local/software ,然后解压
tar -xvf  redis-6.2.1.tar.gz
mv redis-6.2.1 redis6 #重命名了一下,可以忽略

[root@iZszxghs0ozok0Z software]# ls
redis6  redis-6.2.1.tar.gz

编译安装redis:

#编译redis,进入redis解压目录,执行make命令
cd /usr/local/software/redis6
make

#安装到指定⽬录,install
mkdir -p /usr/local/redis
make PREFIX=/usr/local/redis install

#如上,redis安装到了/usr/local/redis目录下,
[root@iZszxghs0ozok0Z redis6]# cd /usr/local/redis
[root@iZszxghs0ozok0Z redis]# ls
bin
[root@iZszxghs0ozok0Z redis]# cd bin 
[root@iZszxghs0ozok0Z bin]# ls
dump.rdb  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

#启动redis试试
./redis-server
[root@iZszxghs0ozok0Z bin]# ./redis-server 
22173:C 21 Jul 2021 11:51:33.205 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
22173:C 21 Jul 2021 11:51:33.205 # Redis version=6.2.1, bits=64, commit=00000000, modified=0, pid=22173, just started
22173:C 21 Jul 2021 11:51:33.205 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
22173:M 21 Jul 2021 11:51:33.205 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 6.2.1 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 22173
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

22173:M 21 Jul 2021 11:51:33.206 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
22173:M 21 Jul 2021 11:51:33.206 # Server initialized
22173:M 21 Jul 2021 11:51:33.206 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
22173:M 21 Jul 2021 11:51:33.206 * Loading RDB produced by version 6.2.1
22173:M 21 Jul 2021 11:51:33.206 * RDB age 2850 seconds
22173:M 21 Jul 2021 11:51:33.206 * RDB memory usage when created 0.79 Mb
22173:M 21 Jul 2021 11:51:33.206 * DB loaded from disk: 0.000 seconds
22173:M 21 Jul 2021 11:51:33.206 * Ready to accept connections

默认使用6379 端口, 如果外部访问redis记得 开放防火墙端口。

  • redis-server redis服务端
  • redis-cli redis 客户端
  • 启动可以指定配置文件,默认在redis解压目录有个redis.conf ;或者指定其他配置文件,

5、Docker安装 Redis6

#安装并运⾏Docker。
yum install docker-io -y
systemctl start docker

#检查安装结果。
docker info

#启动使⽤Docker
systemctl start docker #运⾏Docker守护进程
systemctl stop docker #停⽌Docker守护进程
systemctl restart docker #重启Docker守护进程

docker ps #查看容器
docker stop #容器id

#修改镜像仓库
vim /etc/docker/daemon.json

#改为下⾯内容,然后重启docker
{
"debug":true,"experimental":true,
"registry-mirrors":
["https://pb5bklzr.mirror.aliyuncs.com","https://hubmirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
} 

#查看信息
docker info #如果访问不了,记得看防⽕墙/⽹络安全组端⼝是否开放

#部署redis 并配置密码
docker run -itd --name my-redis -p 6379:6379 redis --requirepass 123456
-i #以交互模式运⾏容器,通常与
-t #同时使⽤;
-d #后台运⾏容器,并返回容器ID;

6、Redis6 核心配置

  • daemonize yes 配置后台运⾏,默认no
  • bind 绑定指定ip访问, 0.0.0.0是不限制,配置多个ip例⼦ 12.13.432.12 31.12.43.13 ⽤空格隔开
  • port 端⼝号 默认6379
  • requirepass 密码配置
  • dbfilename 配置redis持久化⽂件名称
  • dir 配置redis持久化⽂件存储地址
  • save 配置redis持久化机制

我的redis 安装在/usr/local/redis,需要创建的目录:

  • 日志 /usr/local/redis/log
  • 数据 /usr/local/redis/data
  • 配置⽂件目录 /usr/local/redis/conf
cd /usr/local/redis/conf
touch redis.conf #创建配置文件,也可以把 redis6源码解压包的redis.conf 复制过来修改

redis.conf内容如下:

#任何ip可以访问
bind 0.0.0.0
#守护进程
daemonize yes
#密码
requirepass 123456
#日志文件
logfile "/usr/local/redis/log/redis.log"
#持久文件名称
dbfilename xdclass.rdb
#持久化文件件存储路径
dir /usr/local/redis/data
#持久化策略, 10秒内有个1个key改动,执行快照
save 10 1

然后进入bin目录

cd /user/loca/redis/bin
./redis-server ../conf/redis.conf #启动redis,此时是后台启动的
./redis-cli -a 123456 # 输入密码连接redis 服务即可

开放防火墙:

s#开放8888端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent   

#重启防火墙
firewall-cmd --reload
#查看端口号是否开启
firewall-cmd --query-port=6379/tcp
#查看所有打开的端口
firewall-cmd --zone=public --list-ports

7、可视化工具及命名规范

使用Redis Desktop Manager,进行可视化操作,当然还有很多,可以自行百度。

redis系统公告已读未读_redis系统公告已读未读

redis 配置文件单机默认16个数据库,集群的话则没有这个概念,⽽是solt槽位

7.1 key命名规范

  • 方便管理+易读
  • 不要过长,本身key也占据空间
  • 冒号分割,不要有特殊字符(空格-引号-转义符)
  • 例如:业务名:表名:ID
    role-service:role:1
    user:sign:1

另外推荐在线redis工具: 在线⼯具学习: http://try.redis.io/