概述:
Redis的键值可以使用物种数据类型:字符串,散列表,列表,集合,有序集合。本文详细介绍这五种数据类型的使用方法。本文命令介绍部分只是列举了基本的命令,至于具体的使用示例,可以参考Redis官方文档:Redis命令大全
1.字符串类型
字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据。可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为512MB。字符串是其他四种类型的基础,与其他几种类型的区别从本质上来说只是组织字符串的方式不同而已。
基本命令
字符串操作
-
SET赋值,用法:
SET key value
-
GET取值,用法:
GET key
-
INCR递增数字,仅仅对数字类型的键有用,相当于Java的i++运算,用法:
INCR key
-
INCRBY增加指定的数字,仅仅对数字类型的键有用,相当于Java的i+=3,用法:
INCRBY key increment
,意思是key自增increment,increment可以为负数,表示减少。 -
DECR递减数字,仅仅对数字类型的键有用,相当于Java的i–,用法:
DECR key
-
DECRBY减少指定的数字,仅仅对数字类型的键有用,相当于Java的i-=3,用法:
DECRBY key decrement
,意思是key自减decrement,decrement可以为正数,表示增加。 -
INCRBYFLOAT增加指定浮点数,仅仅对数字类型的键有用,用法:
INCRBYFLOAT key increment
-
APPEND向尾部追加值,相当于Java中的”hello”.append(“ world”),用法:
APPEND key value
-
STRLEN获取字符串长度,用法:
STRLEN key
-
MSET同时设置多个key的值,用法:
MSET key1 value1 [key2 value2 ...]
-
MGET同时获取多个key的值,用法:
MGET key1 [key2 ...]
位操作
-
GETBIT获取一个键值的二进制位的指定位置的值(0/1),用法:
GETBIT key offset
-
SETBIT设置一个键值的二进制位的指定位置的值(0/1),用法:
SETBIT key offset value
-
BITCOUNT获取一个键值的一个范围内的二进制表示的1的个数,用法:
BITCOUNT key [start end]
-
BITOP该命令可以对多个字符串类型键进行位运算,并将结果存储到指定的键中,BITOP支持的运算包含:OR,AND,XOR,NOT,用法:
BITOP OP desKey key1 key2
-
BITPOS获取指定键的第一个位值为0或者1的位置,用法:
BITPOS key 0/1 [start, end]
2.散列类型
散列类型相当于Java中的HashMap,他的值是一个字典,保存很多key,value对,每对key,value的值个键都是字符串类型,换句话说,散列类型不能嵌套其他数据类型。一个散列类型键最多可以包含2的32次方-1个字段。
基本命令
-
HSET赋值,用法:
HSET key field value
-
HMSET一次赋值多个字段,用法:
HMSET key field1 value1 [field2 values]
-
HGET取值,用法:
HSET key field
-
HMGET一次取多个字段的值,用法:
HMSET key field1 [field2]
-
HGETALL一次取所有字段的值,用法:
HGETALL key
-
HEXISTS判断字段是否存在,用法:
HEXISTS key field
-
HSETNX当字段不存在时赋值,用法:
HSETNX key field value
-
HINCRBY增加数字,仅对数字类型的值有用,用法:
HINCRBY key field increment
-
HDEL删除字段,用法:
HDEL key field
-
HKEYS获取所有字段名,用法:
HKEYS key
-
HVALS获取所有字段值,用法:
HVALS key
-
HLEN获取字段数量,用法:
HLEN key
3.列表类型
列表类型(list)用于存储一个有序的字符串列表,常用的操作是向队列两端添加元素或者获得列表的某一片段。列表内部使用的是双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度是O(1),获取越接近列表两端的元素的速度越快。但是缺点是使用列表通过索引访问元素的效率太低(需要从端点开始遍历元素)。所以列表的使用场景一般如:朋友圈新鲜事,只关心最新的一些内容。借助列表类型,Redis还可以作为消息队列使用。
基本命令
-
LPUSH向列表左端添加元素,用法:
LPUSH key value
-
RPUSH向列表右端添加元素,用法:
RPUSH key value
-
LPOP从列表左端弹出元素,用法:
LPOP key
-
RPOP从列表右端弹出元素,用法:
RPOP key
-
LLEN获取列表中元素个数,用法:
LLEN key
-
LRANGE获取列表中某一片段的元素,用法:
LRANGE key start stop
,index从0开始,-1表示最后一个元素 -
LREM删除列表中指定的值,用法:
LREM key count value
,删除列表中前count个值为value的元素,当count>0时从左边开始数,count<0时从右边开始数,count=0时会删除所有值为value的元素 -
LINDEX获取指定索引的元素值,用法:
LINDEX key index
-
LSET设置指定索引的元素值,用法:
LSET key index value
-
LTRIM只保留列表指定片段,用法:
LTRIM key start stop
,包含start和stop -
LINSERT像列表中插入元素,用法:
LINSERT key BEFORE|AFTER privot value
,从左边开始寻找值为privot的第一个元素,然后根据第二个参数是BEFORE还是AFTER决定在该元素的前面还是后面插入value -
RPOPLPUSH将元素从一个列表转义到另一个列表,用法:
RPOPLPUSH source destination
4.集合类型
集合在概念在高中课本就学过,集合中每个元素都是不同的,集合中的元素个数最多为2的32次方-1个,集合中的元素师没有顺序的。
基本命令
-
SADD添加元素,用法:
SADD key value1 [value2 value3 ...]
-
SREM删除元素,用法:
SREM key value2 [value2 value3 ...]
-
SMEMBERS获得集合中所有元素,用法:
SMEMBERS key
-
SISMEMBER判断元素是否在集合中,用法:
SISMEMBER key value
-
SDIFF对集合做差集运算,用法:
SDIFF key1 key2 [key3 ...]
,先计算key1和key2的差集,然后再用结果与key3做差集 -
SINTER对集合做交集运算,用法:
SINTER key1 key2 [key3 ...]
-
SUNION对集合做并集运算,用法:
SUNION key1 key2 [key3 ...]
-
SCARD获得集合中元素的个数,用法:
SCARD key
-
SDIFFSTORE对集合做差集并将结果存储,用法:
SDIFFSTORE destination key1 key2 [key3 ...]
-
SINTERSTORE对集合做交集运算并将结果存储,用法:
SINTERSTORE destination key1 key2 [key3 ...]
-
SUNIONSTORE对集合做并集运算并将结果存储,用法:
SUNIONSTORE destination key1 key2 [key3 ...]
-
SRANDMEMBER随机获取集合中的元素,用法:
SRANDMEMBER key [count]
,当count>0时,会随机中集合中获取count个不重复的元素,当count<0时,随机中集合中获取|count|和可能重复的元素。 -
SPOP从集合中随机弹出一个元素,用法:
SPOP key
5.有序集合类型
有序集合类型与集合类型的区别就是他是有序的。有序集合是在集合的基础上为每一个元素关联一个分数,这就让有序集合不仅支持插入,删除,判断元素是否存在等操作外,还支持获取分数最高/最低的前N个元素。有序集合中的每个元素是不同的,但是分数却可以相同。有序集合使用散列表和跳跃表实现,即使读取位于中间部分的数据也很快,时间复杂度为O(log(N)),有序集合比列表更费内存。
基本命令
-
ZADD添加元素,用法:
ZADD key score1 value1 [score2 value2 score3 value3 ...]
-
ZSCORE获取元素的分数,用法:
ZSCORE key value
-
ZRANGE获取排名在某个范围的元素,用法:
ZRANGE key start stop [WITHSCORE]
,按照元素从小到大的顺序排序,从0开始编号,包含start和stop对应的元素,WITHSCORE选项表示是否返回元素分数 -
ZREVRANGE获取排名在某个范围的元素,用法:
ZREVRANGE key start stop [WITHSCORE]
,和上一个命令用法一样,只是这个倒序排序的。 -
ZRANGEBYSCORE获取指定分数范围内的元素,用法:
ZRANGEBYSCORE key min max
,包含min和max,(min
表示不包含min,(max
表示不包含max,+inf
表示无穷大 -
ZINCRBY增加某个元素的分数,用法:
ZINCRBY key increment value
-
ZCARD获取集合中元素的个数,用法:
ZCARD key
-
ZCOUNT获取指定分数范围内的元素个数,用法:
ZCOUNT key min max
,min和max的用法和5中的一样 -
ZREM删除一个或多个元素,用法:
ZREM key value1 [value2 ...]
-
ZREMRANGEBYRANK按照排名范围删除元素,用法:
ZREMRANGEBYRANK key start stop
-
ZREMRANGEBYSCORE按照分数范围删除元素,用法:
ZREMRANGEBYSCORE key min max
,min和max的用法和4中的一样 -
ZRANK获取正序排序的元素的排名,用法:
ZRANK key value
-
ZREVRANK获取逆序排序的元素的排名,用法:
ZREVRANK key value
-
ZINTERSTORE计算有序集合的交集并存储结果,用法:
ZINTERSTORE destination numbers key1 key2 [key3 key4 ...] WEIGHTS weight1 weight2 [weight3 weight4 ...] AGGREGATE SUM | MIN | MAX
,numbers表示参加运算的集合个数,weight表示权重,aggregate表示结果取值 - ZUNIONSTORE计算有序几个的并集并存储结果,用法和14一样,不再赘述。
声明:原创文章,转载请注明出处,本文链接:http://qifuguang.me/2015/09/29/Redis五种数据类型介绍/
相关推荐
在实际项目中,我们可以在配置文件中指定使用哪种缓存类型,并通过`CacheFactory`创建相应的缓存实例。这样,我们就可以在不修改大量代码的情况下,轻松地切换到不同的缓存策略。 总的来说,通过`.NET`抽象缓存工厂...
5. **数据类型**:Redis支持多种数据结构,包括字符串(String)、哈希表(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构为各种应用场景提供了便利,比如缓存、计数器、队列等。 6. **...
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是...
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是...
1. **数据类型**:Redis支持五种基本数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。这些数据类型为多种应用场景提供了灵活的数据结构。 2. **持久化机制**:...
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是...
4. **数据浏览**:提供键值对的查看和编辑功能,支持数据类型包括字符串、哈希、列表、集合、有序集合等。 5. **数据操作**:支持CRUD(创建、读取、更新、删除)操作,以及发布/订阅、事务处理等功能。 6. **命令行...
2. **数据浏览与编辑**:通过键值对的方式展示Redis中的数据,支持多种数据类型如字符串、哈希、列表、集合和有序集合的查看与编辑。 3. **命令行支持**:用户可以直接在界面上执行Redis命令,进行数据操作或者测试...
5. 模块系统:Redis的模块系统允许开发者扩展其功能,比如添加新的数据类型或命令。新版本可能对模块系统的API进行了调整,以更好地支持第三方模块的开发。 6. 日志和监控:Redis提供了丰富的日志记录和监控选项,...
- **数据类型选择**: - 内容 | FF | 00 - 功能 | 数据 | 指令 ##### 2.3 主要功能 - **串口初始化**:`SciaInit()`, `SciaFifoInit()` 这两个函数负责配置串口的相关参数,如波特率等。 - **中断处理**:程序中...
4. **数据类型定义**:针对特定处理器架构,头文件可能会定义特殊的数据类型,如`__int16`、`__uint32`等,用于高效处理数据。 二、快速启动指南 `DSP281x_HeaderFiles_QuickStart_Readme.pdf`是快速入门的关键。...
4. 在四种购买行为类型中,完全无计划购买是指消费者在店内受到广告影响而临时改变购买决策的行为。 5. 英式拍卖是从高价开始,逐渐降低价格直到有人接受的拍卖方式。 电子商务概论的考试还涉及到了订单处理流程、...
该指南详细介绍了 LSDYNA 的使用方法、命令和选项,并提供了实践经验和技巧。 一、LSDYNA 概述 LSDYNA 是一种基于显式有限元方法的动力学分析软件,能够快速解决瞬时大变形动力学、大变形和多重非线性准静态问题,...
4. **数据序列化和反序列化**:iedis可能处理了数据在Java对象和Redis键值之间的转换,支持多种数据类型,如字符串、列表、集合、哈希表等。 5. **事务支持**:如果iedis实现了Redis的事务特性,那么它可以提供...
本篇文章通过解析给定的SPWM源码,详细介绍了SPWM技术的基本概念、关键数据结构及其作用,并深入分析了初始化函数的工作原理。这些内容对于理解SPWM技术及其在实际应用中的实现方式具有重要意义。通过掌握这些知识,...
信息不再仅仅是一种数据的集合,而是转化为了一种战略资源,能够帮助企业获取和维持竞争优势。本讲义将深入探讨信息的三个维度——内容、时间和形式,以及如何通过战略信息系统提升企业竞争力。 首先,信息的三个...
**ANSYS/LS-DYNA** 是一种结合了显式有限元程序 **LS-DYNA** 和 **ANSYS** 强大前后处理功能的软件解决方案。它适用于解决瞬态大变形动力学问题、大变形和多重非线性准静态问题以及复杂的接触碰撞问题。用户可以利用...