-
Notifications
You must be signed in to change notification settings - Fork 0
14 redis学习笔记
解决了什么问题?
redis的value最大支持512M,但是请不要将内存当硬盘用
优点: × 易于扩展 × 大数据量时高性能 × 灵活的数据模型(字段随意)
3v(海量,多样,实时)+3高(高性能,高并发,高扩展)
mongodb:分布式文件系统
ACID
CAP:强一致性,可用性,分区容错性:3选2
BASE:基本可用,软状态,最终一致
分布式:不同的服务器部署不同的模块;集群:不同的服务器部署相同的模块
remote directory server
/usr/local/bin
查看进程是否有启动:
ps -ef | grep redis
- 单进程,epoll,提高大并发连接少量活跃的CPU利用率
- 默认16个数据库
- select:选库
- dbsize:key的数量
- flushdb:清空当前库
- flushall:情况所有库
keys *: 查看所有key exists key:查看key是否存在 select:选库 move:移动key到不同的库 expire key:设置key的过期时间 ttl key:查看key的过期时间 type key;查看key的类型
incr/decr/incrby/decrby:对数字加减,原子操作 getrange/setrange:获取或设置substring,getrange xx 0 -1表示获取所有 setex:设置值的同时设置过期时间 setnx:不存在才设置值 mset/mget/msetnx:批量设置key,注意,msetnx多个key的时候,只要有一个key存在,就会都报错
lpush/rpush:左插,右插 lpop/rpop:右出,左出 lindex/rindex:按照位置查数据 llen:获取长度 lrem:删除n个value ltrim:从指定位置截取指定长度的值,并赋值给原list rpoplpush list1 list2;右出左进,从一个list到另一个list lset list1 index value:从左边设置指定位置的值 linsert list1 before/after value valueToInsert:在指定值的左边插入值
sset/smembers/sismembers:设置,获取,判断 scard:获取集合里的元素个数 srem:删除集合中的元素 srandmember key n:随机返回集合的n个元素值 spop:随机取值并删除 smove set1 set2 value1:将集合的元素移动到另一个集合 sdiff/sinter/suniom set1 set2:差集,交集,并集,注意,sdiff是在set1的集合中取,比如[1,2], [2,3]的sdiff返回1,没有3
hset/hget hmset/hmget/hgetall hdel:删除某个属性 hlen:属性个数 hexists:判断属性是否存在 hkeys/hvalues:获取所有属性,获取所有值 hincrby/hincrbyfloat:把某个属性值增加 n hsetnx:不存在才赋值
zadd zset01 score1 v1 score1 v2: zrange zset01 0 -1 [withscores]:获取所有zset01的值,[包含分数] zrangebyscore zset 60 (90 limit index count:获取60到90分之间但不包含90的值,从index开始返回count个 zrem zset01 v1:删除v1 zcard/zcount 60 90 zrank:获取排名 zscore:获取某人的分数 zrevrank:获取倒数排名 zrevrange:倒数排名 zrevrangebyscore 90 60:注意这个分数要倒过来
# 获取redis当前启动路径
config get dir
# 设置认证
config set requirepass "123456"
# 设置缓存过期策略
maxmemory-policy
# 样本数,对于非精确算法,先选出这些样本然后再比对
maxmemory-simples
- rdb:内存快照,复制新进程写入文件dump.rdb
- 配置:save [time] [changes]
- save/bgsave命令手动备份
- aof:以日志的形式记录每个写操作,追加记录到文件中
- Appendfsync
- Always:同步持久化,每次数据发生变更立即同步到磁盘
- Everysec:默认值,每秒同步,可能会丢失1秒内的数据
- No:交给操作系统来完成
- Appendfsync
aof文件会优于rdb文件先加载,当aof文件损坏时,redis会无法启动,此时可以用reds-check-aof --fix来修复aof文件的错误
当aof文件是上一次rewirte的一倍大小时,且大小超过64M时,启动rewrite,优化aof文件大小
auto-aof-rewrite-percentage: 100 auto-aof-rewrite-min-size: 64mb
- multi
- exec
- discard
- watch
- unwatch
注意,在执行实务时,有两种情况:
- 命令错误,在加入命令队列的时候就会报错,并且执行的时候,全部命令都失败
- 运行时错误,在加入命令队列的时候没报错,执行的时候,只有该命令失败,其他命令正常执行
- 悲观锁:怕不一致,所以加锁
- 乐观锁:没人同时改,不加锁,但更新之前判断数据有无更改(通过版本号),适用于读多写少
# 列举当前所有的channel
pubsub channels
# 查看某些channel的订阅数量
pubsub numsub [channel-name]
读写分离
slaveof ip port
注意:
- 主机挂了,从机的身份不会改变,但是仍然可读;主机恢复后可继续保持原有主从状态
- 从机挂了,再启动的时候,需要重新运行slaveof命令,才可以恢复从机的身份
变为master: slaveof no one
自动选择master
redis-sentinel xx.conf
缺点:
- 复制延迟
- 主从太多时,会加重负担
76a8d71a9ffa162b9c723dc5b8e59fef4e4f772c:web-tech/14-redis学习笔记.md