Redis数据结构

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(不同步)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 字典(dict) dict字典是基于hash算法来实现,是Hash数据类型的底层存储数据结构。我们来看下redis...
    java菜阅读 387评论 0 1
  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    空语阅读 1,593评论 0 2
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,958评论 2 27
  • 企业级redis集群架构的特点 海量数据 高并发 高可用 要达到高可用,持久化是不可减少的,持久化主要是做灾难恢复...
    lucode阅读 2,193评论 0 7
  • 原帖地址:https://www.jianshu.com/p/2f14bc570563 redis概述 Redis...
    onlyHalfSoul阅读 2,154评论 0 28