redis主要用来做缓存
短短几年,Redis就有了很大的用户群体,目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,Github,Twitter等。
Redis是一个开源的,遵循BSD协议的,基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库,redis提供将内存通过网络远程共享的一种服务,提供类似的功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久化等功能。
redis在高并发、低延迟环境要求比较高的环境使用量非常广泛,目前redis在DB-Engine月排行榜一致比较靠前,而且一直是键值型存储类的首位
官网地址:https://redis.io/
Redis6.0版本之前一直都是单线程方式处理用户请求
单线程为何如此快?
注意事项:
数据更新操作流程:
数据还是存在mysql中,redis用来做缓存
数据读操作流程:
官方下载地址:http://download.redis.io/releases/
在centos系统上需要安装epel源
yum -y install epel-release
yum info redis
yum -y install redis
systemctl enable --now redis
pstree -p |grep redis
redis-cli # 客户端连接工具
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> info
下载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-server 是redis服务器程序
redis-server --help
前台启动redis
redis-server /apps/redis/etc/redis.conf
ss -tnl
默认端口:6379
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
redis-server /apps/redis/6380/etc/redis.conf
ss -tnl
连接客户端指定端口,进入到某个实例
redis-cli -p 6380
redis-cli -p 6379
默认情况,redis配置文件的参数和内核参数不匹配,因此还需要修改配置参数,否则启动时会有警告,但是并不影响使用
echo "net.core.somaxconn = 1024" >> /etc/systecl.conf
sysctl -p
net.core.somaxconn = 1024
echo "vm.overcommit_memory=1" >> /etc/systcl.conf
systcl -p
net.core.somaxconn = 1024
vm.overcommit_memory=1
echo never> /sys/kernel/mm/transparent_hugepage/enabled
,并将其添加到/etc/rc.local中,以便在重启后保留设置。禁用THP后,必须重新启动redisecho 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
useradd -r -s /sbin/nologin redis
chown -R redis.redis /apps/redis/
vim /lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectory=0755
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start redis
systemctl enable --now redis
ss -tnl
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 centos
systemctl 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-benchmark | redis性能检测工具 |
redis-check-aof | AOF文件检查工具 |
redis-check-rdb | RDB文件检查工具 |
redic-cli | 客户端工具 |
redis-sentinel->redis-server | 哨兵,软连接到server |
redis-server | redis服务启动命令 |
vim redis_install.sh
#!/bin/bash
. /etc/init.d/functions
VERSION=redis-5.0.9
DIR1=/apps/redis
PASSWORD=centos
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.conf
if id redis &> /dev/null;then
action "redis 用户已存在" false
else
useradd -r -s /sbin/nologin redis
action "reids 用户创建成功"
fi
chown -R redis.redis ${DIR1}
cat >> /etc/systcl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory=1
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]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectory=0755
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start redis
systemctl enable --now redis &> /dev/null && action "Redis 服务启动成功" || { action "redis 服务启动失败" false;exit; }
}
install
chmod +x vim redis_install.sh
./redis_install.sh
主要分为客户端连接和程序的连接
redis-cli
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>
vim redis_test.sh
#!/bin/bash
NUM=`seq 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.sh
redis-cli
> auto centos
> keys *
> get key-996
>flushdb # 清空当前库的数据
> keys *
> flushall # 清空所有的数据
和上次6380的多实例类似