美文网首页
Redis数据结构

Redis数据结构

作者: 王哈哈哈哈哈 | 来源:发表于2018-09-25 14:28 被阅读0次

    Redis的数据结构

    五种数据类型

    • 字符串(String)
    • 哈希(hash)
    • 字符串列表(list)
    • 字符串集合(set)
    • 有序字符串集合(sorted set)

    Key定义的注意点

    • 不要太长

    不要超过1024字节 可能会降低查找效率

    • 不要太短

    会降低key的可读性

    • 统一的命名规范

    例如 user:123456789,user:987654321

    存储String

    • 二进制安全的,存入和获取的数据相同
    • Value最多可以容纳的数据长度是512M

    字符串基本命令

    命令 操作 结果解释
    set set home xiaogao set key 为 home 值为xiaogan
    get get home 返回 xiaogan
    getset getset home wuhan 获取home 并更改home的值为wuhan
    del del people 删除键为peoplo的数据
    incr incry num 设置num 为自增
    decr decr num 设置num 为自减
    incrby incrby num5 5 设置num5 为自增 且跨度为5
    decrby decrby num5 3 设置num5 为自减 且跨度为3
    append append num5 123 在num5键所对应的值后面添加123

    存储Hash

    • String Key和String Value的map容器
    • 每一个Hash可以存储4294967295个键值对

    Hash基本命令

    命令 操作 结果解释
    hset hset myhash username whh key为myhash的哈希中set一个key为username 值为 whh的键值对
    hget hget myhash username 获取key为myhash的哈希的username
    hmset hmset pojo username tom age 18 key为pojo的哈希中set两个 username tom和age 18 键值对
    hmget hmget pojo username age 获取pojo哈希中的username和age的值
    hgetall hgetall pojo 输出为"username" "whh" "age" "18"
    hdel hdel pojo username 删除pojo中的username键值对
    hincrby hincrby pojo age 2 pojo中的age的值变为20
    hexists hexists pojo sex 判断pojo哈希中是否存在sex的键,存在返回1不存在返回0
    hlen hlen pojo 判断pojo哈希中又多少个键值对
    hkeys hkeys pojo "username" "age"
    hvals 命令 "tom" "18"

    存储list

    • ArrayList使用数组方式
    • LinkedList使用双向链接方式
    • 双向链表中增加数据
    • 双向链表中删除数据

    存储list常用命令

    • lpush rpush 两端添加
    • rpop 两端弹出
    • lrange 查看列表
    • 扩展命令
    • 获取列表元素个数
    命令 操作 结果解释
    lpush lpush listleft a b c 1 2 3 表示从左侧插入,元素顺序 list:[3 2 1 c b a]
    rpush lpush listright a b c 1 2 3 表示从右侧插入,元素顺序 list:[a b c 1 2 3]
    rpop rpop listleft 元素顺序变为 list:[3 2 1 c b a]
    lrange lrange listleft 0 -1 便利所有元素,0表示第一个元素(star),-1表示最后一个元素(end)
    llen llen listleft 查看listleft列表的长度
    lpushx lpushx listleft x 在listleft中最左边插入元素x
    lrem lrem test 3 3 test:[1 2 3 1 2 3 1 2 3]执行操作后list:[1 2 1 2 1 2]第一个三大于0从左边开始删除值为3的元素删除3个
    lset lset test 2 hhh 把test的列表角标为2的元素替换成hhh
    linsert linsert test before 2 hhh 把test的列表角标第一个元素2之前插入一个元素hhh
    linsert linsert test after 2 hhh 把test的列表角标第一个元素2之后插入一个元素hhh
    rpoplpush rpoplpush list1 list2 删除list1的右边的元素删除插入到list2z

    存储Set

    • 和List不同的是Set集合中不允许出现重复元素
    • Set可包含的最大元素数量是4294967295

    存储Set常用命令

    • 添加删除元素
    • 获得集合中的元素
    • 集合中的差集运算
    • 集合中的交集运算
    • 集合中的并集运算
    • 扩展命令
    命令 操作 结果解释
    sadd sadd myset a b c 向myset集合中添加 a b c 三个元素
    srem sadd myset c myset集合中删除 c 元素
    smembers smembers myset 查看myset集合中的元素
    sismember sismember myset 9 查看myset集合中有没有元素9 有返回1没有返回0
    sdiff sdiff set1 set2 差集
    sinter sinter set1 set2 交集
    sunion sunion set1 set2 并集
    scard scard set1 set1集合中元素的数量
    randmember randmember set1 随机获取set1集合中的一个元素
    sdiffstore sdiffstore s set1 set2 set1与set2的差集存储到s集合中
    sinterstore sinterstore s set1 set2 set1与set2的交集存储到s集合中

    存储Sorted-set有序集合

    命令 操作 结果解释
    zadd zadd mysort 70 zs 80 ls 90 ww 有序的键值对根据数字从低到高升序
    zscore zscore mysort ww 获取ww的值
    zrem zrem mysort ww 删除ww
    zcard zcard mysort 获取mysort的长度
    zrange zrange mysort 0 -1 获取所有的key(有序的)
    zrange zrange mysort 0 -1 withscores 获取所有的键值对从小到大
    zrevrange zrevrange mysort 0 -1 withscores 获取所有的键值对从大到小
    zremrangebyrank zremrangebyrank mysort 0 3 按范围删除m'y'sort的元素

    Redis特性

    多个数据库 默认使用第一个数据库,总共又16个分别是0-15

    Redis事务

    • multi 开始事务
    • exec 提交事务
    • discard 事务回滚

    Redis持久化方式的四种方式

    redis 高性能是因为在内存中,
    内存中同步到硬盘中就是持久化操作

    • RDB方式 指定的时间内,把数据写入到磁盘一次
    • AOF方式 将操作日志保存下来,启动redis,重新构建
    • 不持久化
    • 同时 RDB方式 AOF方式

    rdb方式:

    优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件)

    劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的。也就是积攒的数据比较多,一旦懵逼,就彻底懵逼了

    配置文件: redis.windows.conf

    RDB方式:
    194行

    save 900 1   //  900秒 至少1个key发生变化就写入磁盘
    save 300 10  //  300秒 至少10个key发生变化就写入磁盘
    save 60 10000  //  60秒 至少10000个key发生变化就写入磁盘
    

    228行

    dump.rdb   //  文件名 The filename where to dump the DB
    

    238行

    dir ./        //当前文件目录
    

    AOF持久化

    优势:数据安全, 每秒同步,每修改同步,不同步

    劣势:如果宕机 这1s的数据就没了。

    每修改同步,安全,但是效率慢。
    对于日志的写入方式采用append模式,在写的过程中发生宕机,写了一半,宕机,下次启动前工具会解决数据一致性问题。如果日志过大,redis会启动重写日志。

    配置文件:redis.windows.conf

    在redis.windows.conf中开启 appendnly yes 581行

    选择一种同步策略 appendfsync always(每次操作同步,效率低,最安全)、everysec(每秒同步) 、no(不同步)

    相关文章

      网友评论

          本文标题:Redis数据结构

          本文链接:https://www.haomeiwen.com/subject/ckcloftx.html