Redis学习总结(二)--Redis数据结构
Redis支持六种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
|结构类型|存储的值|结构读写功能|
|--|--|
|string|可以是字符串、浮点型、整型|对整个字符串或字符串的其中一部分进行操作;对浮点型、整型进行自增或自减操作|
|list|一个链表,链表上的每个节点存放一个字符串|从链表的两端推入或弹出对象;根据偏移量对链表进行修剪;读取单个或多个对象;根据值查找或移除对象|
|set|包含字符串的无序容器,里面的每个字符串都不相同|添加、移除、获取单个对象;检查一个对象是否存在集合中;计算交集、并集、差集;从集合中随机获取对象|
|hash|包含键值对的无序散列表|添加、移除、获取单个键值对;获取所有键值对|
|sorted set|字符串与浮点数分值之间的有序映射,排列顺序由分值的大小决定|添加、移除、获取单个对象;根据分值范围或者成员来获取对象|
|HyperLogLog|基数统计|添加元素; 统计基数;|
string(字符串)
- string 是 redis 最基本的类型,一个 key 对应一个 value。
- string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。
- string 类型是 Redis 最基本的数据类型,最大能存储 512MB。
常用命令
SET key value
设置指定 key 的值,如果值存在就覆盖(不加可以项的情况下)。
可选项:
[EX seconds] [PX milliseconds] [NX|XX]
EX seconds:表示过期时间,单位为秒PX milliseconds:表示过期时间,单位为毫秒NX:只有键key不存在的时候才会设置key的值XX:只有键key存在的时候才会设置key的值
GET key
获取指定 key 的值。如果该 key 有值返回值内容,否则返回 (nil) 表示空。
GETRANGE key start end
用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
GETSET key value
设置指定 key 的值,并返回 key 的旧值。如果 key 没有旧值时,即 key 不存在时,返回 nil 。
SETEX key TIMEOUT value
设置指定 key 的值并设置过期时间,等同于 SET key value EX seconds
SETNX key value
当 key 不存在时才设置,等同于 SET key value NX
STRLEN key
返回指定 key 的长度,不存在的 key 长度为 0。
INCR key
指定 key 自增 1。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 命令。如果是自增的值不是整数或浮点数的话会报 (error) ERR value is not an integer or out of range 错误
INCRBY key INCR_AMOUNT
将 key 中储存的数字加上指定的增量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么也会返回上面的错误。
INCRBYFLOAT key INCR_AMOUNT
为 key 中所储存的值加上指定的浮点数增量值。如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。
DECR key
与 INCR相反,执行自减 1 操作
DECRBY key DECREMENT_AMOUNT
将 key 所储存的值减去指定的减量值。
APPEND key new_value
用于为指定的 key 追加值。
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
MSET key1 value1 key2 value2 .. keyN valueN
用于同时设置一个或多个 key-value 对。
MSETNX key1 value1 key2 value2 .. keyN valueN
用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。如果其中有一个 key 存在,操作失败,因为操作上原子性的,所有 key 都没有设置。
MGET key1 key2 .. keyN
返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
Hash(哈希)
Redis hash 是一个 string类型的 field 和 value 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
常用命令
HSET KEY_NAME FIELD VALUE
用于为哈希表中的字段赋值。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。
HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
HSETNX KEY_NAME FIELD VALUE
用于为哈希表中不存在的的字段赋值。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,操作无效。
HLEN KEY_NAME
用于获取哈希表中字段的数量。当 key 不存在时,返回 0 。
HGET KEY_NAME FIELD_NAME
用于返回哈希表中指定字段的值。如果给定的字段或 key 不存在时,返回 nil。
HMGET KEY_NAME FIELD1...FIELDN
用于返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值。
HKEYS key [FIELD] [VALUE]
用于获取哈希表中的所有域(field)。
HVALS KEY_NAME [FIELD] [VALUE]
一个包含哈希表中所有域(field)值的列表。 当 key 不存在时,返回一个空表。
HEXISTS KEY_NAME FIELD_NAME
用于查看哈希表的指定字段是否存在。如果哈希表含有给定字段,返回 1。如果哈希表不含有给定字段或 key 不存在,返回 0。
HDEL KEY_NAME FIELD1.. FIELDN
用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。返回被成功删除字段的数量,不包括被忽略的字段。
List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
常用命令
LPUSH KEY_NAME VLAUE [VALUE ...]
将一个或多个值插入到列表头部(左端)。
RPUSH KEY_NAME VLAUE [VALUE ...]
将一个或多个值插入到列表尾部(右端)。
LPOP key
移除并返回列表头部第一个元素。
RPOP key
移除并返回列表尾部第一个元素。
LINDEX key offset
返回列表中索引下标为 offset 的元素
LRANGE key start end
返回列表从 start 偏移量到 end 偏移量范围内的所有元素,包括(start 和 end)。
LTRIM key start end
对列表进行修剪,只保留从 start 偏移量到 end 偏移量范围内元素,包括(start 和 end)。
LLEN key
返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0。
Set(无序集合)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
常用命令
SADD key value1..valueN
将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。返回添加成功的数量。
SREM key value1..valueN
用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。返回移除成功的数量。
SISMEMBER KEY VALUE
判断成员元素是否是集合的成员。如果成员元素是集合的成员,返回 1。如果成员元素不是集合的成员或 key 不存在,返回 0。
SCARD KEY_NAME
回集合中元素的数量。当集合不存在时返回 0。
SPOP key [count]
用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。
SUNION KEY KEY1..KEYN
返回给定集合的并集。不存在的集合 key 被视为空集。
SINTER KEY KEY1..KEYN
返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN
返回给定集合之间的差集。不存在的集合 key 将视为空集。差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。
SMEMBERS key
返回集合中的所有的成员。 不存在的集合 key 被视为空集合。
sorted set(有序集合)
Sorted set 是 set 的一个升级版本,它在 set 的基础上增加了一个顺序属性,这一属性在添加修改元素时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列字段的数据表,一列存 value,一列存顺序编号。操作中 key 理解为zset 的名字。
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
用于将一个或多个成员元素及其分数值加入到有序集当中。
如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
ZREM key member [member ...]
用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
ZCARD
用于计算集合中元素的数量。
ZINCRBY key increment member
对有序集合中指定成员的分数加上增量 increment
ZCOUNT
计算在有序集合中指定区间分数的成员数
ZRANK key member
返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。
ZSCORE key member
返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
ZRANGE key start stop [WITHSCORES]
返回有序集中,指定区间内的成员。
HyperLogLog(基数计数)
基数计数(cardinality counting)通常用来统计一个集合中不重复的元素个数,例如统计某个网站的UV,或者用户搜索网站的关键词数量。数据分析、网络监控及数据库优化等领域都会涉及到基数计数的需求。
HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。缺点就是有3%以内的误差。
常用命令
PFADD key element [element ...]
将所有元素参数添加到 HyperLogLog 数据结构中。
PFCOUNT key [key ...]
返回给定 HyperLogLog 的基数估算值。
PFMERGE destkey sourcekey [sourcekey ...]
命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。
Redis学习总结(二)--Redis数据结构的更多相关文章
- StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用
ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行Redis的一系列操作,对于一个整个应用 ...
- Redis学习笔记二 (BitMap算法分析与BitCount语法)
Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...
- redis 学习(二)-- 通用命令
redis 学习(二)-- 通用命令 1. keys pattern 含义:查找所有符合给定模式(pattern)的key 命令 含义 keys * 遍历所有 key keys he[h-l]* 遍历 ...
- redis学习教程二《四大数据类型》
redis学习教程二<四大数据类型> 四大数据类型包括:字符串 哈希 列表 集合一 : Redis字符串 Redis字符串命令用于管理Redis中的字符串 ...
- 分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令
Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sor ...
- Redis学习系列二之.Net开发环境搭建及基础数据结构String字符串
一.简介 Redis有5种基本数据结构,分别是string.list(列表).hash(字典).set(集合).zset(有序集合),这是必须掌握的5种基本数据结构.注意Redis作为一个键值对缓存系 ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
- Redis学习笔记之Redis基本数据结构
Redis基础数据结构 Redis有5种基本数据结构:String(字符串).list(列表).set(集合).hash(哈希).zset(有序集合) 字符串string 字符串类型是Redis的va ...
- 【Redis】Redis学习(二) master/slave、sentinel、Cluster简单总结
项目中用到Redis,所以准备学习一下,感觉Redis的概念还是很多的,什么主从模式.sentinel模式.集群模式的,一下子都晕了,我觉得还是有必要先理清这些基本概念再说. 一.单节点实例 单节点实 ...
随机推荐
- 基于 Github 存储附件的 wordpress 插件
前言 插件名称 wp-github-gos, 本插件核心功能使用了 GitHub API 设置页面和核心业务逻辑主要参考插件 wordpress-qcloud-cos 的实现,替换了其中 腾讯云 CO ...
- 没事别想不开做Halcon视觉工程师 halcon机器视觉如何学习?
今天我们来听听看来自一个机器视觉工程师的唠叨和吐槽,在这之后,你还想学人工智能,还想学机器视觉?恭喜你,你对人工智能机器视觉是真爱了! 既然自己选择了这条路,那么无论前进路上有多坎坷,跪着也要走完. ...
- 【Unity游戏开发】不接SDK也能在游戏内拉起加QQ群操作?
一.引子 一般在游戏进行对外测试的时候都会有一个玩家QQ群,方便玩家反馈问题.交流游戏心得等.那么为了增加玩家加QQ群的欲望,可能会在游戏里面设计一个小功能,点击一下可以直接拉起手Q加群的操作,加了Q ...
- .NET Core CSharp初级篇 1-8泛型、逆变与协变
.NET Core CSharp初级篇 1-8 本节内容为泛型 为什么需要泛型 泛型是一个非常有趣的东西,他的出现对于减少代码复用率有了很大的帮助.比如说遇到两个模块的功能非常相似,只是一个是处理in ...
- EF Core的Code First 基础
一.创建实体类与映射类 通过NuGet引用Microsoft.EntityFrameworkCore 1.创建实体类 Code First可以通过为实体类字段添加相应特性,来创建对应的字段类型等,举例 ...
- 【Android】error: Error retrieving parent for item: No resource found that matches the given name 'Theme.Sherlock.Light.NoActionBar'.
问题: res 文件夹下的 values 下的 styles.xml <style name="Sherlock.Light.NoActionBar" parent=&quo ...
- EasyUI combobox下拉列表实现搜索过滤(模糊匹配)
项目中的某个下拉列表长达200多个项,这么巨大的数量一个一个找眼镜都得看花,于是就得整了个搜索功能.看网上别人帖子有只能前缀匹配的方案,但只能前缀匹配的话用起来也不是很方便.于是就记录一下模糊匹配的方 ...
- 数字麦克风PDM信号采集与STM32 I2S接口应用(二)
在使用STM32的数字麦克风I2S接口时,计算采样率让人头疼,芯片手册上没有明确的说法,而手册上的计算方法经过测试确和实验不符.借助搜索引擎,大部分资料都是来自于开发板卖家或开发板论坛,主要是咪头采集 ...
- eclipse的下载安装配置
1.在eclipse官网下载与你电脑版本相对应的安装包.链接:https://www.eclipse.org/downloads/eclipse-packages/ 2.下载与eclipse版本相对应 ...
- WPF:window设置单一开启
方法一: Window window = new Window();window.ShowDialog; 方法二: 设置一个判断窗口打开状态的全局控制变量 private bool i ...