Redis基本概念、常用命令、主从复制

Redis基本理念

传统的ACID:

  1. A:原子性
  2. C:一致性
  3. I:独立性
  4. D:持久性

Redis中的CAP:

  1. C:强一致性
  2. A:可用性
  3. P:分区容错性

CAP的三进二原则

  • AP:大多数网站架构的选择
  • CP:Redis Mongodb
  • CA:传统Oracle数据库

BASE:

  • BA:基本可用
  • S:软状态
  • E:最终一致

Redis的特点

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候再次加载
  • Redis支持简单的key-value类型,还提供list,set,zset,hash等数据结构的储存
  • Redis支持数据的备份

Redis的五大数据类型

  • Sting 字符串
    • String类型是二进制安全的,可以保存任何数据,包括jpg或者序列化的对象
    • redis中的字符串value最大可以512m
  • Hash 哈希 类似java中的map
    • redis hash是一个键值对集合
    • redis hash是一个string类型的field和value的映射表,hash特别适合用于储存对象
  • List 列表
  • Set 集合
  • Zset 有序集合

Redis常用命令

Redis字符串(String):

  • exists [key]:判断某个key是否存在,如果存在则返回数量.不存在则返回0
  • move [key] [数据库序号]:将当前库中的某个key移动到目标数据库中
  • expire [key]:给指定的key设置过期时间
  • ttl [key]:查看目标key还有多长时间过期,-1表示永不过期,-2表示已经过期.单位为秒
  • keys * :查看当前库中的所有key,可以使用通配符
  • type [key]:查看目标key是什么数据类型
  • strlen [key]:查看目标key的长度
  • append [key] [string]: 向key中追加内容
  • incr [key]:使目标key的值+1 (incrby [key] [num]增加指定数量)
  • decr [key]:使目标key的值-1 (decrby [key] [num]减少指定数量)
  • getrange [key] [start] [end]:获取key中指定区间中的值
  • setrange [key] [start] [end]:覆盖key中指定区间中的值
  • setex [key] [time] [value]:添加key-value时并指定过期时间
  • setnx [key] [value]:如果目标key不存在则添加,存在则添加失败

Redis列表(LIst):

  • lpush [列表名] [值1 值2 值3 …]:从列表左边添加元素(右边rpush)
  • lpop [列表名]:弹出最坐边的一个元素(右边rpop)
  • lrange [列表名] [起始位置] [结束位置]:列出列表中从起始位置到结束位置的元素(全部元素为0 -1)
  • lindex [列表名] [索引号]:找出列表中指定位置的元素
  • llen [列表名]:返回值为列表的长度
  • lrem [列表名] [n] [value]:从列表中删除n个value
  • ltrim [list] [start] [end]:从list中截取start-end的值并附给list
  • linsert [list] [before/after] [value1] [value2]:在value1后面插入value2

Redis集合(Set):

  • sadd [set] [value1] [value2] …:向set中添加value1,value2,…元素(非重复)
  • smembers [set]:查看set中的所有元素
  • sismember [set] [value]:查看set中是否含有value,若有则返回1,无则返回0
  • scard [set]:查看set中的元素个数
  • srem [set] [value]:删除set中的value
  • srandmember [set] [num]:在set中随机取出num个元素
  • spop [set]:在set中随机pop一个元素,并在set中删除
  • smove [set1] [set2] [value]:将set1中的value移动到set2中(移动后set1中不含value)
  • sdiff [set1] [set2]:求set1对set2的差集
  • sinter [set1] [set2]:求set1和set2的交集
  • sunion [set1] [set2]:求set1和set2的并集

Redis哈希(Hash):

  • hset [key] [k1] [v1] [k2] [v2] …:向key中添加k1-v1,k2-v2键值对
  • hget [key] [k]:取出key中的k的v值
  • hmset [key] [k1] [v1] [k2] [v2]…:批量设置key的键值对
  • hmget [key] [][][k1] [k2]…:批量取出key中k1,k2…的值
  • hgetall [key]:将key中所有键值对全部取出(取出的格式为key,value,key,value…)
  • hdel [key] [k1] [k2]…:将key中健为k1,k2…的键值对删除
  • hexists [key] [k]:查看key中是否有键为k的键值对,有则返回1,没有则返回0
  • hkeys [key]:查看key中所有的健
  • hvals [key]:查看key中所有的值
  • hincrby [key] [k] [num]:将key中的键为k的值自增num(如果为float类型数据使用incrbyfloat)
  • hsetnx [key] [k1] [v1]:如果key中不存在k1则插入并返回1,否则返回0

Redis有序集合(Zset):

  • zadd [set] [score1] [value1] [score2] [value2]…:向set中添加score1,value1,score2,value2
  • zrange [set] [start] [end]:取出set中从start到end之间的元素(withscores可以将分数也显示出来)
  • zrangebyscore [key] [score1] [score2]:将key中score1和score2之间的元素显示出来(默认为闭区间,如果在分数前加(则表示为开区间)(如果最后加limit则可类比mysql中的分页查询,如limit 2 2表示将结果中从第二个开始截取两个显示出来)
  • zrem [set] [value1] [value2] [value3]… :将set中的value1,value2,value3…移除
  • zcount [set] [score1] [score2]:查询在score1和score2之间的元素个数
  • zcard [set]:查询set中所有元素个数
  • zrank [set] [value]:查询目标value在set中的位置下标
  • zscore [set] [value]:查询value对应的score值
  • zrev前缀用来查询逆序集合,可用:zrevrank,zrevrange,zrevrangebyscore

RedisRDB

触发方式

  • Redis数据持久化方式之一

  • 自动触发:

    • 可在配置文件中配置持久化方式,如15分钟改动1次,5分钟改动20次,1分钟改动10000次.sava 900 1.sava 300 20.save 60 10000.( save m n ,m为秒数,n为变化次数)
  • 手动触发:

    • 1.当在redis命令行中执行save命令时(阻塞redis服务器,不能执行其他命令)
    • 2.当执行flushall时(此时dump.rdb为空,无意义)
    • 3.当执行bgsave时(异步操作,此时会fork一个子进程,redis此时可以执行其他命令,阻塞只发生在fork时)
  • stop-writes-on-bgsave-error :默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了

  • rdbcompression ;默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

  • **rdbchecksum :**默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

  • dbfilename :设置快照的文件名,默认是 dump.rdb

  • **dir:**设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。默认是和当前配置文件保存在同一目录。

    也就是说通过在配置文件中配置的 save 方式,当实际操作满足该配置形式时就会进行 RDB 持久化,将当前的内存快照保存在 dir 配置的目录中,文件名由配置的 dbfilename 决定。

恢复方式

当Redis重新启动时会自动读取目录下的dump.rdb文件(加载文件期间Redis为阻塞状态,直到文件加载完成)

Redis AOF

基本介绍

  • aof有三种追加操作指令的方式,分别是appendfsync always/everysec/no.分别表示一致同步,每秒同步(推荐使用)和不同步
  • aof文件若不能读取,可以使用redis的修复aof文件工具
  • 在数据量相同的情况下,aof文件的体积要大于rdb文件体积,且恢复效率低于rdb文件
  • aof运行效率也低于rdb文件,每秒同步策略效率较好,不同步效率和rdb相同
  • 如果与rdb同时启用的话,默认先加载aof文件
  • aof保存的数据要比rdb文件更加完整
  • 不推荐只是用aof方式

开启方式

  • 在redis-conf文件中开启appendonly yes
  • 需要恢复数据时加入参数aof文件的地址
  • 默认文件名为appendonly.aof

关于rewrite

  • 默认触发规则为当aof文件为上次重写的两倍且大于64m时进行重写
  • 重写可以减小aof文件的体积

Redis事务

命令

  • multi:标志一个事务块的开始
  • exec:执行事务块内的所有命令
  • discard:放弃事务块内所有命令的执行
  • unwatch:取消watch命令对所有key的监视
  • watch key [key…]:监视一个或者多个key,如果其中任意一个key有所改动,则事务将被打断

Redis消息订阅/发布

  • publish [channel] [msg]:向channel中发布msg消息
  • subscribe [channel]:订阅channel中的消息(支持通配符的方式)

Redis主从复制

1.一主二从

  • 一个主机,两个从机
  • 从机上使用命令 slaveof [ipaddress] [port] 来复制主机内容
  • 使用info replication来查看当前是主机还是从机
  • 主机宕机后,从机待命; 从机宕机后,与主机断开连接,若无配置则重新上线后默认为主机.

2.薪火相传

  • 主机从机的关系类似于链表节点关系
  • 任意一个节点宕机以后都会影响后续节点

3.反客为主

  • 当主机宕机以后,从机可以使用slaveof no one命令来重新成为主机

4.哨兵模式

  • 在linux使用redis-sentinel [sentinel.conf文件路径]开启哨兵模式
  • 在配置文件中加入 sentinel monitor [主机别名] [ip地址] [端口号] [投票数] 来配置主机及主机宕机后从机的选举票数
  • 主机宕机后,redis-sentinel会根据投票结果在从机中选取一个当作主机,其他从机归属到选举出的主机下,若选举完成后主机上线,则主机默认当作新选举的主机的从机.
  • 可以配置多个哨兵进行监控
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值