赣州市开发区建设局网站,教务管理系统是应用软件吗,蜘蛛搜索引擎网页版,wordpress 本地 搭建文章目录 一、redis基础redis简介redis 特性单线程redis 对比 memcachedredis 典型应用场景 二、redis安装及连接yum安装redis查看yum仓库redis版本yum安装 redis 编译安装 redis编译安装前台启动redis启动多实例解决启动时的三个警告提示创建 redis 用户编辑 redis 服务器启动… 文章目录 一、redis基础redis简介redis 特性单线程redis 对比 memcachedredis 典型应用场景 二、redis安装及连接yum安装redis查看yum仓库redis版本yum安装 redis 编译安装 redis编译安装前台启动redis启动多实例解决启动时的三个警告提示创建 redis 用户编辑 redis 服务器启动文件验证 redis 启动使用客户端连接redis设置密码登录创建命令软连接编译安装后的命令一键编译安装Redis脚本 连接到 Redis客户端连接redis程序连接 Redisshell连接方式python连接方式 redis 的多实例 一、redis基础
redis主要用来做缓存
redis简介
短短几年Redis就有了很大的用户群体目前国内外使用的公司众多比如阿里百度新浪微博知乎网GithubTwitter等。
Redis是一个开源的遵循BSD协议的基于内存的而且目前比较流行的键值数据库key-value database是一个非关系型数据库redis提供将内存通过网络远程共享的一种服务提供类似的功能的还有memcached但相比memcachedredis还提供了易扩展、高性能、具备数据持久化等功能。
redis在高并发、低延迟环境要求比较高的环境使用量非常广泛目前redis在DB-Engine月排行榜一致比较靠前而且一直是键值型存储类的首位
官网地址https://redis.io/
redis 特性
速度快10W QPS基于内存C语言实现单线程持久化支持多种数据结构支持多种编程语言功能丰富支持Lua脚本发布订阅事务pipline等功能简单代码短小精悍单机核心代码只有23000行左右单线程开发容易不依赖外部库使用简单主从复制支持高可用和分布式
单线程
Redis6.0版本之前一直都是单线程方式处理用户请求
单线程为何如此快
纯内存非阻塞避免线程切换和竞态消耗
注意事项
一次只运行一条命令拒绝长慢命令keysflushallflushdbshow lua scriptmulti/execoperate big valuecollection其实不是单线程早期版本是单进程单线程3版本后实际还有其他线程fsync file descriptor, close file descriptor
redis 对比 memcached
支持数据的持久化可以将内存中的数据保持在磁盘中重启redis服务或者服务器之后可以从备份文件中恢复数据到内存继续使用支持更多的数据类型支持string字符串、hash哈希数据、list列表、set集合、zset有序集合支持数据的备份可以实现类似于数据的master-slave模式的数据备份另外也支持使用快照AOF支持更大的value数据memcache单个key value最大支持1MB而redis最大支持512MB生产不建议超过2M性能受影响在Redis6版本前redis是单线程而memcached是多线程所以单机情况下没有memcached并发高性能更好但redis支持分布式集群以实现更高的并发单redis实例可以实现数万并发支持集群横向扩展基于redis cluster的横向扩展可以实现分布式集群大幅提升性能和数据安全性都是基于C语言开发
redis 典型应用场景
session共享常见于web集群中的Tomcat或者PHP中的多web服务器session共享缓存数据查询、电商网站商品信息、新闻内容计数器访问排行榜、商品浏览数等和次数相关的数值统计场景微博/微信社交场合共同好友粉丝数关注点赞评论等消息队列ELK的日志缓存、部分业务的订阅发布系统地理位置基于GEO地理位置信息定位实现摇一摇附近的人外卖等功能
数据更新操作流程
数据还是存在mysql中redis用来做缓存 数据读操作流程 二、redis安装及连接
官方下载地址http://download.redis.io/releases/
yum安装redis
在centos系统上需要安装epel源
查看yum仓库redis版本
yum -y install epel-release
yum info redisyum安装 redis
yum -y install redis
systemctl enable --now redis
pstree -p |grep redis
redis-cli # 客户端连接工具
127.0.0.16379 ping
PONG
127.0.0.16379 info编译安装 redis
下载redis源码包
网站http://download.redis.io/releases/
编译安装
获取软件安装包安装编译环境
yum -y install make gcc tcl
wget https://download.redis.io/releases/redis-5.0.9.tar.gz
tar xf redis-5.0.9.tar.gz编译安装
cd redis-5.0.9
cd src/
make
make PREFIX/apps/redis install配置变量
echo PATH/apps/redis/bin:$PATH /etc/profile.d/redis.sh
. /etc/profile.d/redis.sh目录结构
tree /apps/redis/准备相关目录和文件
mkdir /apps/redis/{etc,log,data,run}
cp ~/redis-5.0.9/redis.conf /apps/redis/etc前台启动redis
redis-server 是redis服务器程序
redis-server --help前台启动redis
redis-server /apps/redis/etc/redis.conf
ss -tnl
默认端口6379启动多实例
刚刚启动的案例是6379端口我们可以在6380端口上开启第二个redis服务为6380准备相关目录和文件
mkdir /apps/redis/6380
cp -ar /apps/redis/* /apps/redis/6380/
tree -d /apps/redis/6380
vim /apps/redis/6380/etc/redis.conf
port 6380前端启动6380
redis-server /apps/redis/6380/etc/redis.conf
ss -tnl
连接客户端指定端口进入到某个实例
redis-cli -p 6380
redis-cli -p 6379解决启动时的三个警告提示
默认情况redis配置文件的参数和内核参数不匹配因此还需要修改配置参数否则启动时会有警告但是并不影响使用
tcp-backlog backlog参数控制的是三次握手的时候server端收到client.ack确认后之后的队列值即全连接队列
echo net.core.somaxconn 1024 /etc/systecl.conf
sysctl -p
net.core.somaxconn 1024vm.overcommit_memory 查看警告信息有提示建议将其值改为10表示内核将检查是否有足够的可用内存供应应用进程使用如果有足够的可用内存内存申请允许否则内存申请失败并把错误返回给应用程序1 表示内核允许分配所有的物理内存而不管当前的内存状态如何2 表示内核允许分配超过所有物理内存和交换空间总和的内存
echo vm.overcommit_memory1 /etc/systcl.conf
systcl -p
net.core.somaxconn 1024
vm.overcommit_memory1transparent huge pages 警告您在内核中启用了透明大页面THP不同于一般内存页的4k为2M支持。这将在Redis中造成延迟和内存使用问题。要解决此问题请以root用户身份允许命令echo never /sys/kernel/mm/transparent_hugepage/enabled并将其添加到/etc/rc.local中以便在重启后保留设置。禁用THP后必须重新启动redis
echo never /sys/kernel/mm/transparent_hugepage/enabled
echo /sys/kernel/mm/transparent_hugepage/enabled /etc/rc.d/rc.local
chmod x /etc/rc.d/rc.local再次启动redis可以看到警告消除建议在其他redis服务器上做以上配置
创建 redis 用户
useradd -r -s /sbin/nologin redis
chown -R redis.redis /apps/redis/编辑 redis 服务器启动文件
复制其他主机yum安装生产的redis.server文件进行修改
vim /lib/systemd/system/redis.service
[Unit]
DescriptionRedis persistent key-value database
Afternetwork.target
[Service]
ExecStart/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop/bin/kill -s QUIT $MAINPID
Typenotify
Userredis
Groupredis
RuntimeDirectoryredis
RuntimeDirectory0755
[Install]
WantedBymulti-user.target验证 redis 启动
systemctl daemon-reload
systemctl start redis
systemctl enable --now redis
ss -tnl使用客户端连接redis
格式
redis-cli -h IP/HOSTNAME -p PORT -a PASSWORD连接示例
redis-cli
127.0.0.1:6739 info设置密码登录
vim /apps/redis/etc/redis.conf
解除下面一行的注释
# requirepass foobared
后面写自己的密码
requirepass centossystemctl restart redis
redis-cli
127.0.0.1:6739 info
127.0.0.1:6739 auth centos
创建命令软连接
ln -s /apps/redis/bin/ /usr/bin/编译安装后的命令
ll /apps/redis/bin/工具作用
工具作用redis-benchmarkredis性能检测工具redis-check-aofAOF文件检查工具redis-check-rdbRDB文件检查工具redic-cli客户端工具redis-sentinel-redis-server哨兵软连接到serverredis-serverredis服务启动命令
一键编译安装Redis脚本
vim redis_install.sh
#!/bin/bash
. /etc/init.d/functions
VERSIONredis-5.0.9
DIR1/apps/redis
PASSWORDcentos
install(){
yum -y install make gcc tcl /dev/null || {action 安装所需包失败请检查包或网络设置 false;exit;}
wget http://download.redis.io/releases/${VERSION}.tar.gz /dev/null || { action Redis 源码下载失败 false; exit;}
tar xf $VERSION.tar.gz
cd $VERSION/src
make -j 2 /dev/null make PREFIX${DIR1} install /dev/null action Redis 编译安装成功 || { action Redis 安装编译失败 false;exit;}
ln -s ${DIR1}/bin/* /usr/bin
mkdir -p ${DIR1}/{etc,data,log,run}
cd
cp $VERSION/redis.conf $DIR1/etc
sed -i -e s/bind 127.0.0.1/bind 0.0.0.0/ -e /# requirepass/a reuqirepass ${PASSWOORD} -e /^dir.*/c dir ${DIR1}/data -e logfile .*/c logfile ${DIR1}/log/redis_6379.log -e /^pidfile .*/c pidfile ${DIR1}/run/redis_6379.pid ${DIR1}/etc/redis.confif id redis /dev/null;thenaction redis 用户已存在 false
elseuseradd -r -s /sbin/nologin redisaction reids 用户创建成功
fi
chown -R redis.redis ${DIR1}
cat /etc/systcl.conf EOF
net.core.somaxconn 1024
vm.overcommit_memory1
EOF
systcl -p
echo never /sys/kernel/mm/transparent_hugepage/enabled
echo /sys/kernel/mm/transparent_hugepage/enabled /etc/rc.d/rc.local
chmod x /etc/rc.d/rc.local
/etc/rc.d/rc.local
cat /lib/systemd/system/redis.server EOF
[Unit]
DescriptionRedis persistent key-value database
Afternetwork.target
[Service]
ExecStart/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop/bin/kill -s QUIT $MAINPID
Typenotify
Userredis
Groupredis
RuntimeDirectoryredis
RuntimeDirectory0755
[Install]
WantedBymulti-user.target
EOF
systemctl daemon-reload
systemctl start redis
systemctl enable --now redis /dev/null action Redis 服务启动成功 || { action redis 服务启动失败 false;exit; }
}
installchmod x vim redis_install.sh
./redis_install.sh连接到 Redis
主要分为客户端连接和程序的连接
客户端连接redis
本机无密码连接
redis-cli 跨主机无密码连接跨机连不上去要看配置文件的bind的IP是不是不允许网络连接
redis-cli -h 192.168.64.129 -p 6379
192.168.64.129:6379跨主机密码连接
vim /apps/redis/etc/redis.conf
requirepass centos
systemctl restart redis
redic-cli -h 192.168.64.129 -p 6379 -a centos --no-auth-warning
192.168.64.129:6379程序连接 Redis
redis支持多种开发语言访问https://redis.io/clients
shell连接方式
vim redis_test.sh
#!/bin/bash
NUMseq 1 10000
PASS centos
for i in ${NUM};do
redis-cli -h 127.0.0.1 -a $PASS --no-auth-warning set key-${i} value-${i}
echo key-${i} value-${i} 写入完成
done
echo 一万个key写入到redis完成vim /apps/redis/etc/redis.conf
# 临时关闭RDB不然会报错
save 不用管快照systemctl restart redis
time bash redis_test.shredis-cliauto centoskeys *get key-996flushdb # 清空当前库的数据keys *flushall # 清空所有的数据python连接方式
redis 的多实例
和上次6380的多实例类似