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) 与范围查询, bitmaps, hyperloglogs 和 地理空间(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 配置文件单机默认16个数据库,集群的话则没有这个概念,⽽是solt槽位
7.1 key命名规范
- 方便管理+易读
- 不要过长,本身key也占据空间
- 冒号分割,不要有特殊字符(空格-引号-转义符)
- 例如:业务名:表名:ID
role-service:role:1
user:sign:1
另外推荐在线redis工具: 在线⼯具学习: http://try.redis.io/