文章目录
- 2.Redis的数据类型和相关命令
- 2.1常用数据类型
- 2.2特性和用途
- 2.2.1字符串(String)
- 2.2.2哈希(Hash)
- 2.2.3列表(List)
- 2.2.4集合(Set)
- 2.2.5有序集合(Sorted Set)
- 2.3小结
- 2.4连接命令
- 2.5字符串—keys命令(重要)
- 2.6哈希—hash命令
- 2.7列表—list命令
- 2.8集合—set命令
- 2.9有序集合—Sorted Set命令
- 2.10通用操作
2.Redis的数据类型和相关命令
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
2.1常用数据类型
- 字符串(String):最基本的数据类型,可以存储任意二进制数据,以及普通的文本字符串。
- 哈希(Hash):包含键值对的无序散列,适合保存对象信息,每个键值对存储了字段和值之间的映射关系。
- 列表(List):按照插入顺序排序的字符串元素列表,支持在列表的两端进行插入、删除、获取等操作,可实现栈和队列的功能。
- 集合(Set):无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素。
- 有序集合(Sorted Set):与集合类似,但每个元素都关联着一个分数(score)用于排序,可以按分数范围或成员值获取元素。
注意:Redis的数据类型,是指**value的数据类型,而Key普遍都是字符串类型**
2.2特性和用途
2.2.1字符串(String)
-
特点:
- string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
- string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
- string 类型的值最大能存储 512MB。
-
用途:字符串常用于缓存、计数器、分布式锁等场景。可以用于存储简单的键值对数据,或者用作复杂的数据结构的序列化存储。
-
实战:将字符串用于存储较大的值时,要注意数据大小的限制。合理利用字符串操作函数,如使用 incr 自增计数器,或使用 append 追加字符串值。
-
举例
redis 127.0.0.1:6379> SET aaaa "菜鸟教程" OK redis 127.0.0.1:6379> GET aaaa "菜鸟教程"
2.2.2哈希(Hash)
-
特性:哈希类型是一个键值对的无序散列表,适合存储对象的多个属性。哈希可以嵌套多层,支持单独的字段的读取、更新和删除操作
-
用途:哈希常用于存储和操作对象的属性,如用户信息、文章信息等。可以减少键名的冗余,提高数据结构的可读性和可维护性
-
实战:使用哈希可以更好地组织复杂的数据结构,充分利用字段级别的读取和更新操作。可以使用 HSET 和 HMSET 分别设置单个和多个字段的值
-
举例
使用了 Redis HMSET, HGET 命令,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value。
redis 127.0.0.1:6379> HMSET aa field1 "Hello" field2 "World" "OK" redis 127.0.0.1:6379> HGET aa field1 "Hello" redis 127.0.0.1:6379> HGET aa field2 "World"
2.2.3列表(List)
-
特性:列表是一个按照插入顺序排序的字符串元素集合,支持在列表的两端(头部为左边,尾部为右边)进行插入、删除和获取元素。元素可以重复,列表的长度可以动态变化。
-
用途:列表常用于实现消息队列、任务队列、操作日志、聊天消息记录等。可以实现先进先出(FIFO)或后进先出(LIFO)的数据结构。
-
实战:使用列表操作函数,如 LPUSH、RPUSH、LPOP、RPOP 可以方便地操作列表。在读取大型列表时,要注意时间复杂度和性能问题。
-
举例:
redis 127.0.0.1:6379> lpush aa redis (integer) 1 redis 127.0.0.1:6379> lpush aa mongodb (integer) 2 redis 127.0.0.1:6379> lpush aa rabbitmq (integer) 3 redis 127.0.0.1:6379> lrange aa 0 10 1) "rabbitmq" 2) "mongodb" 3) "redis" redis 127.0.0.1:6379>
2.2.4集合(Set)
-
特性:集合是一个无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素等。
-
用途:集合常用于去重、关注列表、标签、好友列表等场景。由于集合元素是无序的,可以快速进行成员检测和集合操作。
-
最佳实战:使用集合的交集、并集、差集操作可以方便地进行数据筛选和计算。使用 SADD、SREM 进行成员添加和删除。
-
举例:
redis 127.0.0.1:6379> sadd runoob redis (integer) 1 redis 127.0.0.1:6379> sadd runoob mongodb (integer) 1 redis 127.0.0.1:6379> sadd runoob rabbitmq (integer) 1 redis 127.0.0.1:6379> sadd runoob rabbitmq (integer) 0 redis 127.0.0.1:6379> smembers runoob 1) "redis" 2) "rabbitmq" 3) "mongodb"
2.2.5有序集合(Sorted Set)
-
特性:有序集合是一个与每个成员关联的浮点数分数(score),可用于对成员进行排序。支持按照分数范围或成员值获取元素。
-
用途:有序集合常用于排行榜、计分系统、优先级队列等场景。可以按照分数进行排名和排序。
-
最佳实战:利用有序集合的分数,可以快速进行成员的增删改查操作。使用 ZADD、ZREM 进行成员的添加和删除,使用 ZRANGE 和 ZREVRANGE 进行范围查询。
-
举例:
redis 127.0.0.1:6379> zadd runoob 0 redis (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabbitmq (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabbitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000 1) "mongodb" 2) "rabbitmq" 3) "redis"
2.3小结
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
String(字符串) | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M | — |
Hash(字典) | 键值对集合,即编程语言中的Map类型 | 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) | 存储、读取、修改用户属性 |
List(列表) | 链表(双向链表) | 增删快,提供了操作某一段元素的API | 1==,最新消息排行等功能==(比如朋友圈的时间线) 2,消息队列 |
Set(集合) | 哈希表实现,元素不重复 | 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
Sorted Set(有序集合) | 将Set中的元素增加一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行天然排序 | 1、排行榜 2、带权重的消息队列 |
2.4连接命令
#基本语法
#redis-clis
#远程服务连接redis命令
$ redis-cli -h host -p port -a password
2.5字符串—keys命令(重要)
- SET key value:设置指定 key 的值为给定的 value。
- GET key:获取指定 key 的值。
- DEL key:删除指定 key。
- INCR key:将指定 key 的值增加1。
- DECR key:将指定 key 的值减少1。
- APPEND key value:将指定 value 追加到指定 key 的值末尾。
- STRLEN key:返回指定 key 值的字符串长度。
- SETEX key seconds value:设置指定 key 的值,并设置过期时间(秒)。
- SETNX key value:只在指定 key 不存在时,设置 key 的值为给定的 value。
- GETSET key value:设置指定 key 的值,并返回旧值。
- MSET key1 value1 key2 value2 …:设置多个 key-value 对。
- MGET key1 key2 …:获取多个 key 的值。
- STRLEN key:返回指定 key 值的字符串长度。
2.6哈希—hash命令
- HSET key field value:设置哈希类型中指定 key 的 field 域的值为给定的 value。
- HGET key field:获取哈希类型中指定 key 的 field 域的值。
- HDEL key field1 field2 …:删除哈希类型中指定 key 的一个或多个 field 域。
- HEXISTS key field:检查哈希类型中指定 key 是否存在指定的 field 域。
- HGETALL key:获取哈希类型中指定 key 的所有 field 和 value。
- HKEYS key:获取哈希类型中指定 key 的所有 field。
- HVALS key:获取哈希类型中指定 key 的所有 value。
- HINCRBY key field increment:将哈希类型中指定 key 的 field 域的值增加指定的 increment 值。
- HMSET key field1 value1 field2 value2 …:设置哈希类型中指定 key 的多个 field 和 value。
- HMGET key field1 field2 …:获取哈希类型中指定 key 的多个 field 的值。
- HLEN key:获取哈希类型中指定 key 的 field 数量。
- HSTRLEN key field:获取哈希类型中指定 key 的 field 域的字符串长度。
2.7列表—list命令
- LPUSH key value1 [value2 …]:将一个或多个值插入到列表的左侧(头部)。
- RPUSH key value1 [value2 …]:将一个或多个值插入到列表的右侧(尾部)。
- LPOP key:获取并删除列表左侧的第一个元素。
- RPOP key:获取并删除列表右侧的第一个元素。
- LLEN key:获取列表的长度。
- LRANGE key start stop:获取指定范围内的元素,包括 start 和 stop,索引从0开始。
- LINDEX key index:获取列表中指定索引位置的元素。
- LSET key index value:设置列表中指定索引位置的元素值。
- LREM key count value:从列表中删除指定个数的元素。
- LTRIM key start stop:修剪(按照索引范围)列表,只保留指定范围内的元素。
- RPOPLPUSH source destination:从源列表右侧弹出最后一个元素,并将其插入目标列表的左侧。
- BLPOP key1 [key2 …] timeout:从左侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。
- BRPOP key1 [key2 …] timeout:从右侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。
2.8集合—set命令
- SADD key member1 [member2 …]:向集合中添加一个或多个成员。
- SMEMBERS key:获取集合中的所有成员。
- SISMEMBER key member:判断指定成员是否存在于集合中。
- SCARD key:获取集合中的成员数量。
- SREM key member1 [member2 …]:移除集合中的一个或多个成员。
- SRANDMEMBER key [count]:从集合中随机获取一个或多个成员。
- SPOP key [count]:随机移除并返回集合中的一个或多个成员。
- SMOVE source destination member:将指定成员从一个集合移动到另一个集合。
- SUNION key1 [key2 …]:获取多个集合的并集。
- SINTER key1 [key2 …]:获取多个集合的交集。
- SDIFF key1 [key2 …]:获取多个集合的差集(属于第一个集合,但不属于其他集合)。
- SDIFFSTORE destination key1 [key2 …]:计算多个集合的差集,并将结果存储在指定的目标集合中。
2.9有序集合—Sorted Set命令
- ZADD key score1 member1 [score2 member2 …]:向有序集合中添加一个或多个成员,并指定对应的分数。
- ZRANGE key start stop [WITHSCORES]:按照分数从低到高的顺序,获取有序集合中指定范围内的成员。
- ZREVRANGE key start stop [WITHSCORES]:按照分数从高到低的顺序,获取有序集合中指定范围内的成员。
- ZRANK key member:获取有序集合中指定成员的排名(按照分数从低到高排序)。
- ZREVRANK key member:获取有序集合中指定成员的排名(按照分数从高到低排序)。
- ZSCORE key member:获取有序集合中指定成员的分数。
- ZCOUNT key min max:获取有序集合中分数范围内的成员数量。
- ZREM key member1 [member2 …]:从有序集合中移除一个或多个成员。
- ZINCRBY key increment member:将有序集合中指定成员的分数增加指定的增量值。
- ZUNIONSTORE destination numkeys key1 [key2 …] [WEIGHTS weight1 [weight2 …]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的并集,并将结果存储在指定的目标有序集合中。
- ZINTERSTORE destination numkeys key1 [key2 …] [WEIGHTS weight1 [weight2 …]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的交集,并将结果存储在指定的目标有序集合中。
2.10通用操作
- SET key value:设置指定键的值。
- GET key:获取指定键的值。
- DEL key1 [key2 …]:删除一个或多个键。
- EXISTS key:检查指定键是否存在。
- KEYS pattern:查找与指定模式匹配的键集合。
- EXPIRE key seconds:设置键的过期时间,单位为秒。
- TTL key:获取键的剩余过期时间,单位为秒。
- INCR key:将键的值加一。
- DECR key:将键的值减一。
- INCRBY key increment:将键的值增加指定的增量。
- DECRBY key decrement:将键的值减少指定的增量。
- APPEND key value:将指定字符串追加到键的值末尾。
- HSET key field value:将哈希表中指定字段的值设置为指定值。
- HGET key field:获取哈希表中指定字段的值。
- HMSET key field1 value1 [field2 value2 …]:设置哈希表中多个字段的值。
- HMGET key field1 [field2 …]:获取哈希表中多个字段的值。
- HGETALL key:获取哈希表中所有字段和值。
- RPUSHX key value:将值插入到列表的右侧(尾部),仅当列表存在时。
- LPUSHX key value:将值插入到列表的左侧(头部),仅当列表存在时。
- PUBLISH channel message:将消息发布到指定的频道。