redis学习记录

1.五种类型

字符串基本形态:key value key value key value

Hash表基本形态:hash field value field value

List基本形态:key value value value

Set基本形态:key member member member

Sorted set 基本形态: key score member score member score member

1.1字符串String指令

Setex key seconds value

设置过期时间,秒;若存在,则覆盖

Setnx key value

只有键不存在时,才可以进行操作

Psetex key milliseconds value

设置过期时间,毫秒

Getset key value

将key 的值设为 value,返回键key在被设置之前的旧值。

Get key

返回与键 key 相关联的字符串值。

Getset key value

将key值设为value,返回key的旧值

Strlen key

key的字符串的长度

Append key value

key如有值,末尾追加;如无,设为其值。返回长度。

Setrange key offset value

使用value替换key中第offset位的值

Getrange key start end

返回key的值的指定部分,start<= 需要的 <=end

-1表示最后一位,-2表示倒数第二位

Incr key

为a存储的数字值加1

Incrby key increment

为key存储的数字值加上增量increment

Incrbyfloat key increment

为key存储的数字值加上浮点数增量increment

Decr key

为key存储的数字值减去1

Decrby key decrement

为key存储的整数值减去decrement

Mset key value[key value...]

同时为多个键设置值

Msetnx key value [key value...]

当且仅当所有给定键都不存在时,为所有给定键设置值;

即使只有一个给定键已经存在,也会拒绝所有设置

Mget key [key ...]

返回给定的一个或多个字符串的值。

1.2 哈希表Hash指令

Hset hash field value

将哈希表hash中域field的值设为value

Hsetnx hash field vaule

当且仅当域field尚未存在于哈希表的情况下,将其设为value。

Hget hash field

返回给定域的值。

Hexists hash field

检查给定域field是否存在于hash中

Hdel hash field [field...]

删除hash中的一个或多个指定域,

Hlen hash

返回哈希表hash中域的数量

Hstrlen hash field 3.2.0.以上版本

返回hash中,field对应的值的字符串长度

Hincrby hash field increment

为hash中的域field的值加上增量increment

增量可为负数

Hincrbyfloat hash field increment

为hash的域field的值加浮点数增量

Hmset hash field value [field value...]

同时将多个field-value对设置到hash中

Hmget hash field [field...]

返回hash中,一个或多个给定域的值

Hkeys hash

返回hash中的所有域

Hvals hash

返回hash中所有域的值

Hgetall hash

返回hash中,所有的域和值

Hscan hash cursor [match pattern] [count count]

具体信息参考scan cursor [match pattern] [count count]

1.3 List指令

Lpush key value [value...]

将一个或多个值value插入到列表key的表头(左)

Lpushx key value

将值value插入到列表key的表头,

当且仅当key存在且是一个列表

Rpush key value [value...]

将一个或多个值value插入到列表key的表尾(右)

Rpushx key value

将值vaule插入到列表key的表尾,

当且仅当key存在并且是一个列表

Lpop key

移除key的头元素并返回其值

Rpop key

移除key的尾元素并返回其值

Rpoplpush source destination

将source的尾元素取出,作为头元素插入到destination中

Lrem key count value

移除和value相等的值,个数为count的绝对值

Count > 0:从表头向表尾搜索;

Count < 0:从表尾向表头搜索;

Count = 0:移除所有与value相等的值。

Llen key

返回key的长度

Lindex key index

返回key中下标为index的元素,0第一个;

-1最后一个;-2倒数第二个

Linsert key before|after pivot value

将value插入到列表key中的pivot值之前或者之后

Lset key index value

将key中第index个的元素的值设置为value

Lrange key start stop

返回列表key中第start个元素到第stop个元素之间的元素,包括这俩

Ltrim key start stop

将key中除start和stop范围之间的元素都删除,范围内的保留

Blpop key [key...] timeout

阻塞。依次查找各个key,取出并返回第一个不为空的key的头元素,返回结果为相对的key名称和头元素值。如果一直找不到,则等待。等待时间为timeout。

Brpop key [key...] timeout

同blpop,区别在于此指令查找和返回的是尾元素

Brpoplpush source destination timeout

rpoplpush的阻塞版本

1.4 Set 集合指令

Sadd key member [member...]

将各个member的值加入到集合key中,不允许重复值

Sismember key member

判断member元素是否是key集合的成员,是返回1,否则0

Spop key

移除并返回集合中的一个随机元素

Srandmember key [count]

如果只有key参数:返回集合key中的一个随机元素

如有count参数:

  Count > 0:返回含count个元素的数组,元素不同

  Count < 0: 返回count绝对数个元素的数组,元素可能相同

Srem key member [member...]

移除key中的一个或多个member元素

Smove source destination member

将source中的元素member取出并存储到destination中

Scard key

返回集合key的基数,即集合中元素的数量

Smembers key

返回集合key中的全部成员

Sscan key cursor [match pattern] [count count]

详细信息参考scan cursor [match pattern] [count count]

Sinter key [key...]

返回几个集合的交集的元素列表,即几个集合中都有的元素

Sinterstore destination key [key...]

将几个集合的交集保存至destination集合中,返回元素数量

Sunion key [key...]

返回几个集合的并集的元素列表,即这些集合的所有元素

Sunionstore destination key [key...]

将几个集合的并集保存至destination集合中,返回元素数量

Sdiff key [key...]

返回第一个key与其他key所形成的差集的所有元素

Sdiffstore destination key [key...]

求差集并将结果存储至destination中

1.5 Sorted set有序集合指令

Zadd key score member [[score member] [score member]]

将一个或多个member元素及其score加入到有序集key中,返回为成功添加的数量,不包括已存在的(哪怕被更新)

Zscore key member

返回key中,member的score值

Zincrby key increment member

为key中的member的score加上increment

Zcard key

返回key的基数,即member的个数

Zcount key min max

返回key中,score值在min 和max之间的member数量

Zrange key start stop [withscores]

返回key中start和stop之间的成员,返回值按分数从小到大排序;如有with scores,同时返回分数

Zrevrange key start stop [withscores]

同zrange,区别在于本命令按scores从大到小

Zrangebyscore key min max [withscores] [limit offset count]

返回key中score介于min和max的成员,按score从小到大排列。Withscores表示是否显示score值。Limit 部分表示将符合条件的成员以下标0为开始,重新排下标值。然后将这些成员从第offset位开始,选择count 个成员,返回之。

Zrevrangebyscore key max min [withscores] [limit offset count]

同zrangebyscore,区别在于按score从大到小排列。

Zrank key member

返回member在key中的排名,按score从小到大排序,排名以0为首位。

Zrevrank key member

同zrank,区别在于按score从大到小排序

Zrem key member [member...]

移除key中一个或多个member

Zremrangebyrank key start stop

将member按照score从小到大排序,移除序号在start和stop之间的member。

Zremrangebyscore key min max

移除key中所有score值介于min和max之间的member

Zrangebylex key min max [limit offset count]

通过member的字符进行排序,选择出字符在min和max之间的成员。Min和max是从a到z的字符,长度可根据需要指定。比如member中有一个为: 10  zhang ; 如果需要包含该member,可以设计为max是zzzzz。且字符前要有[ 或者(,[表示包括min或max,(表示不包括。

Limit部分表示,从选择得到的member中,选择从offset位开始的count个member,并返回。

Zlexcount key min max

返回member名字在min和max范围内的member的个数

Zremrangebylex key min max

移除key中成员名介于min和max之间的member

Zscan key cursor [match pattern] [count count]

详细信息参考 zscan key cursor [match pattern] [count count]

Zunionstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]

将numkeys个key一起做并集,即囊括所有成员,并将其结果保存至destination中。对于member名字相同的成员,将其score相加,得到保存的新的score。

Weights可以指定两个key一起合并各自的比重是多少。比如 1:2的话就是第一个key的score*,第二个key的score*2;再进行union。默认是1比1。

Aggregate指多个key之间按什么方式聚合,默认是score值相加,还可以设置为选择最小值,或者选择最大值。

Zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]

同zunionstore,无别在于该命令为交集。

 

2. Redis过期策略和内存淘汰机制

Redis采用的是定期删除+惰性删除策略 。

由于定时删除需要定时器来负责监视key,占用太多的CPU资源,所以不采用定时删除。

定期删除:redis默认每100ms检查是否有过期的key,有过期则删除。该检查并不是全部检查,而是随机抽查。

惰性删除:在使用或者获取某个key时,redis去检查之,如果已经到达过期时间却未删除,则先删除。即薛定谔的猫式。当你没有使用这个key时,你永远不知道它是过期以删除还是过期未删除。

3. 实现Redis高可用机制的一些方法

3.1 redis主从复制

主从复制的作用:数据备份、读写分离、分布式集群、实现高可用、宕机容错机制等。

一个master,多个slave。

Master可读可写,主要处理写操作。当发生写操作时,自动将数据同步到slave。

Slave只能处理读操作。

将master数据同步到slave时,可以分为两种:全量同步和增量同步。全量同步将master上的所有数据都复制一份到slave。增量同步是master每执行一个写命令就会向slave进行相应的备份。

3.2 Redis持久化机制

Redis持久化是将内存数据保存到硬盘,redis持久化存储分为AOF和RDB两种模式,默认RDB。

·RDB

  在某个时间点将数据写入一个临时文件dump.rdb。持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复,采用二进制文件形式存储。RDB使用单独子进程进行持久化,主进程不进行IO操作,保证redis高性能。但其缺点是持久化之间会间隔一段时间,如果中间发生故障,会发生数据丢失。所以这种方式适合数据要求不严谨的时候。

·AOF

  将操作+数据以格式化指令的方式追加到操作日志文件的尾部,在append操作返回后(已经写入到文件或者即将写入)才进行实际的数据变更。“日志文件”保存了历史所有的操作过程,当server需要数据恢复时,可以直接replay此日志文件,即可还原所有的操作过程。AOF相对可靠。AOF可以保持更高的数据完整性,由追加file的时间决定。如果日志写入不完整,支持redis-chenk-aof来进行日志修复。aof文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令。其缺点是AOF比RDB文件大,且回复速度慢。

在架构良好的环境中,master通常使用AOF,slave使用RDB。具体的选择可以根据网络情况和业务情况。

3.3 哨兵(sentinel)机制

哨兵用于管理多个redis服务器,主要执行以下任务:

·监控:哨兵会不停检查master和slave是否工作正常;

·提醒:当被监控的redis出现问题时,哨兵可以通过api向管理员或其它应用程序发送通知。

·自动故障迁移:当master不能正常工作时,哨兵将失效master的某个slave升级为新的master,并更改相关配置。

一个架构中运行多个哨兵,这些进程使用流言协议来接收master是否下线的消息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个slave作为新的master。单个哨兵认为master宕机,认为是主观宕机sdown,如果多个哨兵认为master宕机,则认为是客观宕机,odown。然后使用投票算法,选择新的master并进行配置。

3.4 Keepalived

自动重启

是一种实现IP漂移的方法,基于VRRP(虚拟路由冗余协议)来实现LVS服务高可用方案。

对于master和slave,如果master宕机,备份服务器会接管虚拟IP,当作master。此时,keepalived将宕机服务器从集群中剔除,随后若keepalived检测到服务器正常工作后,会自动将服务器加入集群。

Keepalived主要是检查服务器状态。

关于过期部分和高可用部分参考了以下内容:

https://blog.csdn.net/itcats_cn/article/details/82428716

https://blog.csdn.net/itcats_cn/article/details/82391719

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值