Redis
http://www.ywnds.com/?p=5721
Memcached Redis
不支持持久化 支持持久化
纯set get性能好 不如Memcached
简单易用 易用
支持类型单一 支持多种数据类型
依靠magent 集群
没有验证 有基础验证
session 购物车(登陆前放cookie,登录后放redis)
为啥用Redis? 支持多种数据类型,集群,持久化。
解决方案:1、写两份性能差 2、延迟预刷
扩展学习:http://ssdb.io/zh_cn/ LevelDB 应用场景决定redis可以主主复制。
Hbase基本能满足需求,支持集群。海量数据。
redis安装:
wget 下载
make PREFIX=/usr/local/redis MALLOC=libc install
配置文件:
尽量用6379做区分,为以后多实例做区分。
参数补充:requirepass 密码 密码必须申请,否则很容易别黑客拿到root密码。
overcommit_memory is set to 0 超过机器内存,直接报错。建议设置1
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled #关闭大页内存
/usr/local/redis/bin/redis-cli -a hdkj -h 172.16.12.10
redis命令: http://doc.redisfans.com/
set name linux
get name
auth hdkj
keys * #生产环境不能用
exists name
del name
set name linux
type name
计数:set page_view 20
incr page_view
doc.redisfans.com
hset car price 20000
hset car name BMW
type car
keys *
hgetall car
hget car name
hget car price
set car hehe #set 有至高权力,会将hset 设置的覆盖
type car #变成字符串类型了
set car name BMW会报错
del car
hset car price 20000
hset car name BMW
hdel car #报错,作用域是car的价格或者名字
hdel car name 正确
hkeys car
hlen car #几个元素
hset car date 20180101
del car #注意,是都删除,hdel的删除是有区别的
删除大的hash表删除
www.unixhot.article/34
list
最新的5条
lpush numblers 1
lpush numbers a
rpush numbers 1
rpush numbers a
llen numbers
lrange numbers 0 -1 获取所有值
lpop numbers 弹出
集合:
sadd
sadd a 1
sadd a 2
sadd a 3
sadd b 2
sadd b 3
sadd c 3
type a 是set类型,集合类型
smembers a 获取集合中的元素
sismember a 5 判断是否存在
sdiff a b 差集
sunion a b 并集
sinter a b 交集
有序集合:
zset
发布订阅:生成不用,有问题的,获取消息时如果宕机,消息丢失。
阿里的消息队列RocketMQ
日志收集放到kafuka,数据不会丢。可以集群
事务:弱事务,执行中报错捕捉不到。
持久化和主从:
http://doc.redisfans.com/topic/persistence.html
RDB: 数据集的快照,适合备份。fork()一个子进程,可能会卡。
AOF:相当于binglog
生成都开。
vim /etc/redis/redis.conf
save 900 1 #900秒有一个key发生改变
save 300 10
save 60 10000
dbfilename dump_dump_6379.rdb
rdbcompression yes
AOF默认1秒fsync()
备份:
config set appendonly yes
config set save "" 关闭rdb
master不做持久化,slave上做持久化
复制:
不超过16G,能拆么?
不能拆,集群。
主从配置:slaveof IP 端口
默认从服务器是只读的。切换不能写的。
要执行slaveof no one
哨兵可以做主从切换。建议要会手动切换,3年都不宕机的。
memcache 客户端分片(静态分片) 一致性hash,无法扩展无法自动迁移。
代理分片:twemproxy推特开源的 缺点无法自动迁移,proxy会性能瓶颈。
redis集群:主节点故障自动切换,无中心,需要专用的客户端,可以自动扩展。
能解决网卡带宽的问题。16384个槽,根据算法知道key放到哪里。
豌豆荚开源的codis: 1、案例多 2.dashboard 3、迁移工具
zookeeper etcd
github.com/Codist.abs/codis
############################################
redisdoc.com
multi
set key1 1
set key2 2
set key3 3
exec
multi
set key1 1
sadd key 1
exec
一个执行,一个不执行,redis 集群不保证数据的强一致性。
redisdoc.com
config get s*
运维:集群、主从、持久化
#############################################
集群:16384 hash槽
mkdir `seq 7001 7008`
id要改,日志文件要改,dbfilename要改,dir要改
for i in `seq 7001 7008`; do echo $i; done
for i in `seq 7001 7008`; do cd /opt/$i && /usr/local/redis/bin/redis-server redis.conf;done
yum install ruby rubygems -y
找到redis-tirb.rb
redis-trib help
redis-trib create --replicas 1 192.168.2.149:7001 ....
123是主,456是从
cluster nodes
cluster info
添加节点:
redis-trib add-node 192.168.2.149:7007 192.168.2.149:7001
cluster nodes
4个master,但是7007没有槽位。
redis-trib reshard 192.168.2.149:7007
500
7007的ID
cluster nodes 槽位不连续,
7008做7007的从节点,刚加入是主,且没有槽位
redis-trib add-node 192.168.2.149:7008 192.168.2.149:7001
cluster replicate 7007id
######################
管理工具:
yum install httpd php php-redis
gitlab-ctl stop 80 端口不要被占用
git clone https://gt/phpredisadmin
rdbtools 生产工具使用,哪些key比较大,生成内存报告
pip install rdbtools
rdb -c memory dump.rdb >memory.csv
docs.saltstack.com redis模块
删除固定业务的key
codis 豌豆荚
##########################
RDB
save
bgsave 数据量超大fock() 10多个G会导致停几秒
好备份,性能有影响。
bgsave如何知道执行完成?
主从的原理?
AOF
appendonly yes
appendfilename "appendonly.aof"
两个同时用。也是fock()一个子进程。
定期重写使的数据存储更小。
cat appendonly.aof
主从原理,灾难恢复?
magent做代理数据量大是坑,
couchbase是新浪写的memcache的持久化工具。
持久化、主从、集群原理及测试
redis命令: http://doc.redisfans.com/
运维常用命令:
1、连接 ./redis-cli -h 172.16.12.10
auth test123
config set requirepass hdkj
quit
ping
auth hdkj
ping
config set requirepass "" #清空密码
select 1 进入的数据库0-15,命令提示符多了个 [1]
bgrewriteaof 创建当前aof文件的优化版本,日志里会记录执行是否成功。
client setname hello-world
client getname
client setname ""
client list
client kill IP:PORT #之前的连接关闭,创建新连接。
client list 命令行输出的解释:http://doc.redisfans.com/server/client_list.html
config get *
config get s*
config get save
config set save "901 1 300 10 60 10000"
config resetstat #重置info命令中的某些统计数据
conifg rewrite #动态修改的参数在配置文件中也修改了。
dbsize 数据库key的数量
info
monitor #调试时使用,打印出所有执行的语句。
psync #复制使用的命令
shutdown save
slaveof IP port 如果已经是从服务器,会丢掉旧数据集,对新主服务器同步。
slaveof no one #从服务器要升级为主服务器,一定要执行的。
config get slow*
slowlog get
slowlog len
slowlog reset
slowlog len
sync #复制使用
time #服务器时间
主从复制:
sync-->bgsave-->缓冲区数据同步
部分重同步:主服务器缓冲区保留从库的偏移量,psync实现的部分重同步。
slave-read-only 从库的默认模式
主库设置了密码,从库必须也得设置密码。
config set masterauth <password>
masterauth <password>
min-slaves-to-write <number of slaves>
min-slaves-max-lag <number of seconds>
主从复制是异步复制,不能保证数据写入的持久性。
AOF 的默认策略为每秒钟 fsync 一次。
Redis集群:
redis集群不保证数据的强一致性,主从同步还是异步的,为了主节点的处理速度。