------------------------------redis-------------------------------
一、哪儿用了redis?为什么要用redis?
哪儿用来:首页轮播广告
为什么用:因为mysql走的是硬盘,顶不住高并发;redis是走内存;
二、什么是redis?
redis是c语言开发的高性能的k-v形式的数据库,数据存储在内存中
三、redis安装和启动
1、安装
1)安装c语言环境
yum install gcc-c++、
2)上传并解压
cd /usr/upload
tar -zxvf redis-3.0.0.tar.gz
3)编译并安装
cd /usr/upload/redis-3.0.0
make
make install PREFIX=/usr/local/redis
4)拷贝并修改配置文件
cp /usr/upload/redis-3.0.0/redis.conf /usr/local/redis/bin
vim /usr/local/redis/bin/redis.conf:
daemonize yes
··
2、启动和关闭
启动:
cd /usr/local/redis/bin
./redis-server redis.conf
关闭:
cd /usr/local/redis/bin
./redis-cli -h 192.168.204.132 -p 6379 shutdown
四、基本命令
keys *:查看所有key值
exists:判断key值是否存在
expire和ttl:设置和查看key的失效时间
incr和decr:自增和自减
五、redis的多数据库实例
1、redis实例中提供了下标是0-15的16个数据库,不能修改下标,可通过select切换
2、清空数据库的命令:
flushdb:清空当前数据库的数据
flushall:清空所有数据库的数据
六、redis 持久化
1、RDB:默认[数据]
策略:
900 1
300 10
60 10000
缺点:不能保证数据完整性
优点:不影响性能
实验:
1、删除dump.rdb
2、set str qwer
3、./redis-cli shutdown--->观察dump.rdb(生成持久化文件)
2、AOF:[命令]
策略:
# appendfsync always
appendfsync everysec
# appendfsync no
缺点:影响性能
优点:保证数据完整性
实验:
1、设置appendonly为yes
2、set str1 123
3、等待一秒观察appendonly.aof(有数据)
七、主从复制
1、过程
a、从往主发送sync命令
b、主往从发送rdb
c、主往从发送写命令
2、配置步骤
主:无须配置
从:slaveof ip port
实验:
1)往主写数据,观察从是否同步
2)关闭主,往从写数据(主死了从只能读)
八、redis集群
1、redis集群是多少台?
投票容错超过半数:3台 高可用:3台
2、为什么集群中有一个节点挂了,则整个集群都不能用了呢?
redis集群中有16384个槽分给了3个节点,存取数据时:crc16(key)%16383=0~16383
3、搭建步骤
1)安装ruby环境
cd /usr/upload
yum install ruby
yum install rubygems
安装脚本文件
gem install redis-3.0.0.gem
cd redis-3.0.0/src
ll *.rb
注意:必须删除dump.rdb和appendonly.aof文件
2)拷贝6个节点
cd /usr/local
cp -r redis redis-cluster/redis-7001
cp -r redis redis-cluster/redis-7002
cp -r redis redis-cluster/redis-7003
cp -r redis redis-cluster/redis-7004
cp -r redis redis-cluster/redis-7005
cp -r redis redis-cluster/redis-7006
3)修改配置文件
vim redis-cluster/redis-7001/bin/redis.conf:
port 7001
cluster-enable yes
vim redis-cluster/redis-7002/bin/redis.conf:
port 7002
cluster-enable yes
vim redis-cluster/redis-7003/bin/redis.conf:
port 7003
cluster-enable yes
vim redis-cluster/redis-7004/bin/redis.conf:
port 7004
cluster-enable yes
vim redis-cluster/redis-7005/bin/redis.conf:
port 7005
cluster-enable yes
vim redis-cluster/redis-7006/bin/redis.conf:
port 7006
cluster-enable yes
4)创建启动集群的脚本
cd /usr/local/redis-cluster
vim start-all.sh:
cd /usr/local/redis-cluster/redis-7001/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7002/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7003/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7004/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7005/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7006/bin
./redis-server redis.conf
#给权限
chmod 777 start-all.sh
#启动脚本
./start-all.sh
5)使用ruby脚本创建redis集群
cd /usr/upload/redis.3.0.0/src
./redis-trib.rb create --replicas 1 192.168.204.132:7001 192.168.204.132:7002 192.168.204.132:7003 192.168.204.132:7004 192.168.204.132:7005 192.168.204.132:7006
6)测试
./redis-cli -c -p 7001
127.0.0.1:7001> cluster info
127.0.0.1:7001> cluster nodes
九、redis五种数据类型
赋值 取值 删除 特点
string set k v get k del k string
hash hset k k-v hget k k hdel k k map
list lpush/rpush k v... lrange k 0 -1 lrem k 2 v list
set sadd k v... smembers k srem k v set
zset zadd k 1 v... zrange k 0 -1 withscores zrem k v sort set
------------------------------redis的总结-------------------------------
一、redis的持久化
https://blog.csdn.net/chairongdian/article/details/124852514(可参考)
1、为什么需要持久化?
Redis对数据的操作都是基于内存的,当遇到了断电、服务器挂机
等意外情况,如果没有持久化机制,那么Redis中的数据将会丢失无法
恢复。有了持久化机制,Redis在下次重启时可以利用之前持久化的
文件进行数据恢复。
Redis支持的两种持久化机制:
RDB:把当前数据持久化保存在硬盘上。
AOF:记录每次对数据的操作到硬盘上。
2.RDB和AOF 的区别?
RDB:默认开启的,在指定的时间间隔内将内存中的数据集快照写入
磁盘,(如果900秒内有1条Key信息发生变化,则进行持久化
如果300秒内有10条Key信息发生变化,则进行持久化
如果60秒内有10000条Key信息发生变化,则进行持久化
)它恢复时是将快照文件直接读到内存里。
这种持久化方式缺点:不能保证数据完整性(如果900秒内有1条K
ey信息发生变化的过程中出现断电情况) 优点:不影响性能
AOF:Redis是默认没有开启AOF持久化的,可以通过配置redis.conf文件来
开启AOF持久化,(appendonly yes)就可以。AOF持久化是把每次写命令
追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了。
(AOF持久化方案有三种策略:
# appendfsync always 写一次持久化一次
appendfsync everysec 每秒持久化一次
# appendfsync no )不开启持久化
AOF这种持久化方式保证数据的完整性,当然也有缺点:影响redis的性能
二、redis集群
https://blog.csdn.net/a745233700/article/details/112691126
redis的集群模式中可以实现多个节点同时提供写操作,
redis集群模式采用无中心结构,每个节点都以键值对的形式保存数据,节
点之间互相连接从而知道整个集群状态。
一个集群至少要有3个master主节点(保证投票容错超过半数)。
Redis也内置了高可用机制,支持N个master主节点,每个master节点都可以
挂载多个slave从节点,当master节点挂掉时,集群会提升它的某个slave节
点作为新的master主节点,当主节点修复后,它成为从节点,前面的从节
点成为主节点。
Redis集群的数据分布算法:
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽
(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节
点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进
行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取
模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放
入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个
对应的节点上进行存取操作。
2、为什么集群中有一个节点挂了,则整个集群都不能用了呢?
如果算出来的值要存入此节点,而此节点又挂了,此时整个集群就不能用了。
2.0优点:
实现扩容
分摊压力
无中心配置相对简单
2.1.Redis 集群的不足
多键操作是不被支持的
多键的Redis事务是不被支持的。lua脚本不被支持
由于集群方案出现较晚,很多公司已经采用了其他
的集群方案,而代理或者客户端分片的方案想要迁
移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。