zoukankan      html  css  js  c++  java
  • redis

    redis五种数据类型操作,重点是string类型和hash类型

    字符串(String)

    设置字符串值 set 获取值get

    EX 设置过期时间,秒,等同于SETEX key seconds value

    PX 设置过期时间,毫秒,等同于PSETEX key milliseconds value

    NX 键不存在,才能设置,等同于SETNX key value

    XX 键存在时,才能设置

    设置多个键的字符串值 mset key value [key value...]

    redis中可以给key设置一个生存时间,当达到这个时长后,这些键值将会被自动删除

    设置多少秒或者毫秒后过期 set key value ex time 或 setex key time value

    查找键 keys pattern

    pattern取值--------* 任意长度字符,? 任意一个字符,[] 字符集合,表示可以是集合中的任意一个

    键是否存在 exists key

    键重命名 rename key newkey,renamenx key new key

    键删除del key [key....]

    返回旧值并设置新值 getset key value(如果键不存在,就创建并赋值)

    字符串长度 strlen key

    获取value底层存储的数据结构类型 objec encoding key

    键类型 type key

    追加字符串 append key value(存在就追加,不存在就创建)

    获取部分字符串 getranget key start end(负数表示倒数)

    覆盖字符串 setrange key offset value

    步长的增减(默认为1) incr key ,decr key

    散列(hashe)

    由field和关联的value组成的map键值对

    field和value是字符串类型

    设置单个字段 HSET key field value,HSETNX key field value,key的filed不存在的情况下执行,key不存在直接创建

    设置多个字段,HMSET key field value [field value ...]

    返回字段个数,HLEN key

    判断字段是否存在,HEXISTS key field,key或者field不存在,返回0

    返回所有的键值对 HGETALL key

    返回所有字段名 HKEYS key

    返回所有值 HVALS key

    在字段对应的值上进行整数的增量计算

    HINCRBY key field increment

    在字段对应的值上进行浮点数的增量计算

    HINCRBYFLOAT key field increment

    删除指定的字段

    HDEL key field [field ...]

     

    列表(list)

    B block 块,阻塞

    L left 左

    R right 右

    X exist 存在

    左右或者头尾压入元素

    左右或者头尾弹出元素LPOP key,RPOP key

    LPUSH key value [value ...],LPUSHX key value

    RPUSH key value [value ...],RPUSHX key value

    左右或者头尾弹出元素

    LPOP key,RPOP key

    从一个列表尾部弹出元素压入到另一个列表的头部 RPOPLPUSH source destination

    返回列表中指定范围元素 LRANGE key start stop

    表示返回所有元素 LRANGE key 0 -1

    从列表头部开始删除值等于value的元素count次,LIST 可以重复出现

    LREM key count value

    count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count

    count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值

    count = 0 : 移除表中所有与 value 相等的值

    集合(set)

    增加一个或多个元素 SADD key member [member ...],如果元素已经存在,则自动忽略

    移除一个或者多个元素 SREM key member [member ...],元素不存在,自动忽略

    返回集合包含的所有元素 SMEMBERS key,如果集合元素过多,例如百万个,需要遍历,可能会造成服务器阻塞,生产环境应避免使用

    随机返回集合中指定个数的 SRANDMEMBER key [count]

    如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合 最多返回整个集合 conut>=0

    如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值 count < 0 长度为count绝对值,元素可能重复

    如果 count 为 0,返回空

    如果 count 不指定,随机返回一个元素

    返回集合中元素的个数 SCARD key

    随机从集合中移除并返回这个被移除的元素 SPOP key

    把元素从源集合移动到目标集合 SMOVE source destination member

    sdiffstore destination key[key...] 将差集结果存储在目标key中

    sunion number5 number1 number2 并集

    sinter number5 number1 number2 交集

    有序集合(sorted set)

    类似set集合 有序,去重 元素是字符串类型

    每一个元素都关联着一个浮点数分值。并按照分值从小到大的顺序排列集合中的元素,分值可以相同

    zadd key socore memer [ socre member ...]增加一个或者多个元素

    zrem key member[member...]移除一个或多个元素

    zsocore key member 显示分值 【计算机并不能精确表达每一个浮点数,都是一种近似表达】

    zincrby key increment member 增加或者减少分值【increment为负数就是减少】

    zrank key member 返回元素的排名

    zrevrank key member 返回元素的逆序排名

    zrange key start stop [withscores] 返回指定索引区间元素默认按照score从小到大

    **位图(bitmaps)**

    设置某一位上的值setbit key offset value(0/1)

    详述两种持久化原理

    redis的持久化方式------RDB AOF

    RDB

    在默认情况下,Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中

    方式:产生一个RDB:

    a. 阻塞方式: 客户端中执行save命令

    阻塞Redis服务,创建新的dump.rdb替代旧文件

    b. 非阻塞方式:bgsave

    不阻塞redis服务正常接收处理客户端请求,fork()一个新的子进程来创建RDB文件,子进程处理完后会向父进程发送一个信号,通知它处理完毕。接到通知后父进程用新的dump.rdb替代旧文件。

    AOF

    记录所有的写操作命令,在服务启动的时候使用这些命令就可以还原数据库,Append only file,采用追加的方式保存。

    AOF写入机制

    AOF方式不能保证绝对不丢失数据

    目前常见的操作系统中,执行系统调用write函数,将一些内容写入到某个文件里面时,为了提高效率,系统通常不会直接将内容写入硬盘里面,而是先将内容放入一个内存缓冲区(buffer)里面,等到缓冲区被填满,或者用户执行fsync调用和fdatasync调用时才将储存在缓冲区里的内容真正的写入到硬盘里,未写入磁盘之前,数据可能会丢失

    写入磁盘的策略

    appendfsync选项,这个选项的值可以是always、everysec或者no

    always:服务器每写入一个命令,就调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,也不会丢失任何已经成功执行的命令数据

    everysec(默认):服务器每一秒重调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,最多只丢失一秒钟内的执行的命令数据

    no:服务器不主动调用fdatasync,由操作系统决定何时将缓冲区里面的命令写入到硬盘。这种模式下,服务器遭遇意外停机时,丢失命令的数量是不确定的

    运行速度:always的速度慢,everysec和no都很快

    redis哨兵要解决什么问题?原理是什么?

    高可用 Sentinel(哨兵) 官方提供的高可用方案,可以用它管理多个Redis服务实例 编译后产生redis-sentinel程序文件 Redis Sentinel是一个分布式系统,可以在一个架构中运行多个Sentinel进程

    监控 Monitoring Sentinel会不断检查Master和Slaves是否正常 每一个Sentinel可以监控任意多个Master和该Master下的Slaves Sentinel网络 监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息 服务器下线 当一个sentinel认为被监视的服务器已经下线时,它会向网络中的其他Sentinel进行确认,判断该服务器是否真的已经下线 如果下线的服务器为主服务器,那么sentinel网络将对下线主服务器进行自动故障转移,通过将下线主服务器的某个从服务器提升为新的主服务器,并让其从服务器转为复制新的主服务器,以此来让系统重新回到上线的状态

  • 相关阅读:
    [Project Euler] 来做欧拉项目练习题吧: 题目002(转)
    [Project Euler] 欧拉项目练习题001(转)
    Linux wc 结合cat命令统计代码行数
    mysql:主键和索引的区别
    一些常用的SQL语句
    mysql 性能优化方案
    修改mysql用户密码
    Ruby on Rails,创建开发用的MYSQL数据库
    mysql数据库中分区的概念
    Rails 数据库操作
  • 原文地址:https://www.cnblogs.com/huzicourenao/p/11061114.html
Copyright © 2011-2022 走看看