Redis的key和5种Value类型

您所在的位置:网站首页 value是什么类型的数据 Redis的key和5种Value类型

Redis的key和5种Value类型

2024-07-15 14:28| 来源: 网络整理| 查看: 265

文章目录 前言keystringlisthashsetsorted set

前言

这两天学习一下Redis,首先回顾一下Redis中的key和5种value数据类型:string, list, hash, set, zset/sorted_set。 主要学习redis的命令,以及联想出各种类型的应用场景。 Redis中文官网

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

二进制安全 存储数据时不顾及编码格式,直接序列化成字节数组,所以没有数据集约束,这种情况就是二进制安全。 redis客户端常用命令

help @grep[string/list/hash/set/sorted_set] type key # 该key对应的value值类型 exists key # 返回1或0标识给定key的值是否存在 del key # 返回1或0标识值是被删除(值存在)或者没被删除(key对应的值不存在) key

Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。

关于key的几条规则:

长的键值不是个好主意,例如1024字节的键值就不是个好主意,不仅因为消耗内存,而且在数据中查找这类键值的计算成本很高。 太短的键值通常也不是好主意,如果你要用u:1000:pwd来代替user:1000:password,这没有什么问题,但后者更易阅读,并且由此增加的空间消耗相对于key object和value object本身来说很小。当然,没人阻止您一定要用更短的键值节省一丁点儿空间。 -最好坚持一种模式。例如:object-type:id:field就是个不错的注意,像这样user:1000:password。我喜欢对多单词的字段名中加上一个点,就像这样:comment:1234:reply.to。

string

支持操作字符串/数值/位图(bitmap),是二进制安全的。 String类型常用命令

set key value get key strlen key # 值的字节长度 append key value # 给该key追加value incr key # 将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值 incrby key 50 # +50 decr key # -1 decrby key 50 # -50 setbit key offset value # offset表示偏移量 bitcount key [start end] # bitcount表示字节索引,查这个区间里一共有多少1 bitcount key 0 -1 # 表示value所有区间 bitop operation destkey key [key……] # 逻辑语句operation:and or not man ascii # manual 查看Ascii码字符集(最多可表示127个字符)

String应用场景 字符串:键值对类型的数据,eg:session信息 数值:计数器/限流/秒杀 位图:统计用户某时间段内的登录次数/统计某时间段内的活跃用户数量/大数量库存备货

list

按插入顺序排序的字符串元素的集合。他们基本上就是个双向链表(linked lists)。 list常用命令

help @list # 查询出的命令带l的表示list或left(reight) lpush key value value…… # LPUSH 命令可向list的左边(头部)添加一个新元素 rpush key value value…… # RPUSH命令可向list的右边(尾部)添加一个新元素 lrange key 0 -1 # LRANGE 命令可从list中取出一定范围的元素 注意:LRANGE 带有两个索引,一定范围的第一个和最后一个元素。这两个索引都可以为负来告知Redis从尾部开始计数,因此-1表示最后一个元素,-2表示list中的倒数第二个元素,以此类推。 rpop key # 命令pop,它从list中删除元素并同时返回删除的值。可以在左边或右边操作

list应用场景 同向放取:栈 逆向放取:队列 定点取值:数组

hash

由field和关联的value组成的map。field和value都是字符串的。这和Ruby、Python的hashes很像。 hash常用命令

> hmset user:1000 username antirez birthyear 1977 verified 1 OK > hget user:1000 username "antirez" > hget user:1000 birthyear "1977" > hgetall user:1000 1) "username" 2) "antirez" 3) "birthyear" 4) "1977" 5) "verified" 6) "1" Hash 便于表示 objects,实际上,你可以放入一个 hash 的域数量实际上没有限制(除了可用内存以外)。所以,你可以在你的应用中以不同的方式使用 hash。 HMSET 指令设置 hash 中的多个域,而 HGET 取回单个域。HMGET 和 HGET 类似,但返回一系列值

hash应用场景 聚合数据 商品详情页

set

不重复且无序的字符串元素的集合 去重/无序/集合 set常用命令

sadd k1 1 2 3 4 sadd k2 3 4 5 6 sinter k1 k2 #交集 结果:3 4 sunion k1 k2 #并集 结果:1 2 3 4 5 6 sdiff k1 k2 #差集 剔除二者交集,保留左边剩余集合 结果1 2 sdiff k2 k1 #结果 5 6

set应用场景 推荐系统 共同好友:交集 可能认识的人:差集

sorted set

类似Set,但是每个字符串元素都关联到一个叫score浮动数值(floating number value)。里面的元素总是通过score进行着排序,所以不同的是,它是可以检索的一系列元素。(例如你可能会问:给我前面10个或者后面10个元素)。 去重/有序/集合 排序算法:skiplist,跳跃排序 Sorted set常用命令

zadd key [NX|XX] [CN] [INCR] score member [score member……] zrange # 从小到大排序 zrange key 0 1 # 从小到大取前两名 zrevrange key 0 1 # 从大到小取前两名 zincrby key increment member # 给某个成员的score加increment

Sorted set应用场景 排行榜 评论的分页



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3