分布式缓存Redis
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式缓存Redis相关的知识,希望对你有一定的参考价值。
分布式缓存Redis
参考文档http://doc.redisfans.com
#######################################################
Memcache与Redis对比
Memcached Redis
不支持持久化 持久化
纯set get性能好 不如memcached
开发都会用 开发都知道
简单易用 易用
支持类型单一 支持多种数据类型
依赖magent 集群
没有验证 有基础验证
session 购物车(登录前方cookis,等于后写入)
tomcat-sessione-memcache tomcat-session-redis
php.php.ini 后来才有
#######################################################
雪崩效应
1、写两份
2、预刷新
#######################################################
安装Redis
cd /usr/local/src/
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar -zxvf redis-3.0.7.tar.gz
cd redis-3.0.7
yum install gcc
make MALLOC=libc PREFIX=/usr/local/redis-3.0.7 install
cd /usr/local/src/redis-3.0.7/utils
cp redis_init_script /etc/init.d/redis
vim /etc/init.d/redis
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
ln -s /usr/local/redis-3.0.7/ /usr/local/redis
chmod +x /etc/init.d/redis
mkdir /etc/redis/
cp /usr/local/src/redis-3.0.7/redis.conf /etc/redis/6379.conf
#######################################################
修改配置文件
vim /etc/redis/6379.conf
daemonize yes #后台启动
pidfile /var/run/redis_6379.pid #为了以后启动多个redis
bind 192.168.56.21
logfile "/var/log/redis/redis_6379.log"
dir /var/lib/redis_6379 #数据存放地点
requirepass lmkmike #设置密码
tcp-backlog 511
————————————————————————————————————————————————————————————————————
mkdir /var/lib/redis_6379
mkdir /var/log/redis/
echo 512 > /proc/sys/net/core/somaxconn #必须大于511
#######################################################
Redis命令
/etc/init.d/redis start
报错
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘
如果设置0:如果没有足够内存,错误返回给应用程序。
如果设置1:如果没有足够内存,可以分配所有物理内存。
vim /etc/sysctl.conf
vm.overcommit_memory = 1
命令执行
sysctl vm.overcommit_memory=1
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. T
o fix this issue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled‘ as root, and add it to your /etc/rc.local in order to retain the setting afte
r a reboot. Redis must be restarted after THP is disabled.
禁止大页内存,redis有自己的内存机制
echo never > /sys/kernel/mm/transparent_hugepage/enabled
关闭redis报错,是因为没有密码
/etc/init.d/redis stop
vim /etc/init.d/redis
$CLIEXEC -h 192.168.56.21 -p $REDISPORT -a lmkmike shutdown
再次启动
/etc/init.d/redis start正常
9340:M 16 Jan 19:59:36.054 # Server started, Redis version 3.0.7
9340:M 16 Jan 19:59:36.054 DB loaded from disk: 0.000 seconds
9340:M 16 Jan 19:59:36.054 The server is now ready to accept connections on port 6379
#######################################################
连接redis
/usr/local/redis/bin/redis-cli -h 192.168.56.21 -p 6379
auth lmkmike
设置key:value(默认字符串)
set name lmkmike
get值
get name
查看所有的key
keys * #生产禁用
判断是否存在key,返回1存在,返回0不存在
exists name
删除key
del name
查看数据类型
type name
让value加1
set number 123
INCR number
get number
(124)
让value加2
set number 123
INCRBY number 2
get number
(125)
#######################################################
设置hash
HSET car name BMW
HSET car price 200000
查看
hgetall car
hget car name
hget car price
删除其中一个值
hdel car price
查看这个hash所有的key
hkeys car
查看有几个元素
hlen car
删除car,del 可以删除所有的
del car
#######################################################
list列表
左侧插入
lpush numbers 1
lpush numbers a
右侧插入
rpush numbers a
rpush numbers 89
查看长度
llen numbers
查看所有
lrange numbers 0 -1
左侧弹出
lpop numbers
右侧弹出
#######################################################
集合设置
sadd a 1
sadd a 2
sadd a 3
sadd b 1
sadd b 3
sadd c 3
查看集合的元素
smembers a
判断数据是否在集合当众
192.168.56.21:6379> sismember a 1
(integer) 1 #存在
192.168.56.21:6379> sismember a 100
(integer) 0 #不存在
#######################################################
集合运算
查看差集
192.168.56.21:6379> sdiff a b
1) "1"
查看交集
192.168.56.21:6379> sinter a b
1) "2"
2) "3"
查看并集
192.168.56.21:6379> sunion a b
1) "1"
2) "2"
3) "3"
#######################################################
Redis数据持久化
RDB和AOF
RDB:指定的时间间隔把数据保存在硬盘上。
AOF:持久化记录服务器执行所有操作命令,并在服务器启动的时候,通过重新执行这些命令还原数据。
打开RDB快照(默认一打开)
保存在dir = /var/lib/redis_6379
vim /etc/redis/6379.conf
save 900 1 #(900秒内有1个key变化保存)
save 300 10
save 60 10000
#######################################################
开启AOF
修改配置文件
vim /etc/redis/6379.conf
appendonly yes
从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。
这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。
#######################################################
RDB切换到AOF
在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 AOF :
为最新的 dump.rdb 文件创建一个备份。
将备份放到一个安全的地方。
执行以下两条命令:
redis-cli> CONFIG SET appendonly yes
redis-cli> CONFIG SET save ""
确保命令执行之后,数据库的键的数量没有改变。
确保写命令会被正确地追加到 AOF 文件的末尾。
步骤 3 执行的第一条命令开启了 AOF 功能: Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis 会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾。
步骤 3 执行的第二条命令用于关闭 RDB 功能。 这一步是可选的, 如果你愿意的话, 也可以同时使用 RDB 和 AOF 这两种持久化功能。
#######################################################
配置从redis
修改从redis配置文件
vim /etc/redis/6379.conf
slaveof 192.168.56.21 6379 #主redis信息
masterauth lmkmike #主redis密码
从redis默认只读,可以修改slave-read-only no 来可写
启动redis
/etc/init.d/redis start
查看日志是否正常
tail -f /var/log/redis/redis_6379.log
验证是否同步
/usr/local/redis/bin/redis-cli -h 192.168.56.20 -p 6379
auth lmkmike
keys *
#######################################################
1、redis集群,生产案列少。需要专业的客户端。
2、codis 国内案例多,不需要客户端,对外透明。
以上是关于分布式缓存Redis的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot整合Redis以及缓存穿透缓存雪崩缓存击穿的理解如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
2021-07-07 .NET高级班 95-Redis分布式缓存 ServiceStack的破解