Redis 五种数据类型详解

Redis支持五种数据类型: string(字符串):可以为整形、浮点型和字符串,统称为元素,
hash(哈希):hash的key必须是唯一的
list(列表):实现队列,元素不唯一,先入先出原则
set(集合):各不相同的元素
zset(sorted set:有序集合)。

先了解一下key基本知识

Redis 的Key

Redis的 key是字符串类型,但是 key中不能包括边界字符, 由于 key不是 binary safe的字符串,所以像"my key"和"mykey\n"这样包含空格和换行的 key是不允许的。

了解一下key相关指令

 exists key 检测指定key 是否存在,返回 1表示存在, 0 不存在
 del key1 key2 … keyN 删除给定 key,返回删除 key 的数目, 0表示给定 key都不存在
 type key 返回给定 key值的类型。 返回 none 表示 key不存在,string字符类型, list 链表类型 set 无序集合类型…
 keys pattern 返回匹配指定模式的所有 key
 randomkey 返回从当前数据库中随机选择的一个 key,如果当前数据库是空的,返回空串
 rename oldkey newkey 重命名一个 key,如果 newkey 存在,将会被覆盖,返回 1 表示成功,0失败。可能是 oldkey不存在或者和 newkey相同。
 renamenx oldkey newkey 同上,但是如果 newkey存在返回失败。
 expire key seconds 为 key指定过期时间, 单位是秒。 返回 1成功, 0 表示 key 已经设置过过期时间或者不存在。
 ttl key 返回设置过过期时间key的剩余过期秒数。 -1表示key不存在或者未设置过期时间。
 select db-index 通过索引选择数据库, 默认连接的数据库是 0,默认数据库数是 16 个。 返回 1表示成功, 0失败。
 move key db-index 将 key 从当前数据库移动到指定数据库。返回 1 表示成功。 0 表示 key不存在或者已经在指定数据库中
 echo 打印命令
 dbsize 查看数据库key的数量
 info 获取数据库信息
 config get 实时传储收到的请求(返回相关的配置信息) config get * 返回所有配置
 flushdb 清空当前数据库,flushall清空所有数据库

String

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

Redis 五种数据类型详解
Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

string基本语法操作

添加元素
//ex:秒级过期时间,nx:键不存在时才能设置成功,xx键存在时才能设置成功
set key value [ex seconds] [px milliseconds] [nx|xx]
获取值
get key
批量设置值
mset key value [key value …]
mset a 1 b 2 c 3 d 4
批量获取值
mget key [key …]
mget a b c d

设置数值数据增加指定范围值
incr key 自加1
increby key increment 自加指定数值
incrbyfloat key increment 自加指定float

设置数值数据减少指定范围值
decr key
decrby key increment
追加值
append key value
字符串长度
strlen key
设置并返回原值
getset key value

设置数据具体指定的生命周期------可用于实时投票功能

setex key seconds value (秒)
psetex key milliseconds value(毫秒)

Redis控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作

String类型注意事项:

Redis 五种数据类型详解

Key的设置约定

数据库中的热点数据key命名惯例
Redis 五种数据类型详解

String应用场景:

很常见的场景用于统计网站访问数量,当前在线人数等。incr命令(++操作)

Hash

Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
Redis 五种数据类型详解

Hash基本语法操作

 hset key field value 设置 hash field为指定值,如果 key不存在,则创建
 hget key field 获取指定的 hash field。
 hmget key filed1…fieldN 获取全部指定的 hash filed。
 hmset key filed1 value1 …filedN valueN 同时设置hash的多个 field。
 hexists key field 检测指定 field是否存在。
 hdel key field 删除指定的 hash field。
 hlen key 返回指定 hash的 field 数量。
 hgetall 返回hash的所有filed和value

设置指定字段的数值增加指定范围值
 hincrby key field increment将指定的 hash filed 加上指定值(可为负数)。成功返回 hash filed 变更后的值。
 hincrbyfloat key field increment

获取哈希表中所有字段名和字段值
 hkeys key 返回hash的所有field。
 hvals key 返回hash的所有value。

Hash类型注意事项

Redis 五种数据类型详解

hash应用场景:

1.存储、读取、修改用户属性
2.抢购限购限量商品等:
hincrby key field increment可用于监控计数设置

List

  1. list 列表是简单的string类型的双向链表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  2. 增删快,提供了操作某一段元素的API

List基本语法操作

 添加数据:
lpush key string 在key对应list的头部添加字符串元素,返回1表示成功, 0表示key存在且不是list类型。
rpush key string 在key对应list的尾部添加字符串元素。
 获取数据:
llen key 返回key对应list的长度, 如果key不存在返回0, 如果key对应类型不是list返回错误。
lrange key start end 返回指定区间内的元素, 下标从0开始, 负值表示从后面计算, -1表示倒数第一个元素 , key不存在返回空列表。

ltrim key start end 截取list指定区间内元素,成功返回1, key不存在返回错误。
lset key index value 设置list中指定下标的元素值,成功返回1, key或者下标不存在返回错误。
lrem key count value从 List 的头部 ( count正数)或尾部 ( count负数)删除一定数量 ( count)匹配value的元素,返回删除的元素数量。 count为0时候删除全部。
lpop key 从list的头部删除并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误。rpop key从list的尾部删除并返回删除元素。

 规定时间内获取并移除数据:
blpop key1 …keyN timeout 从左到右扫描,返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在list2,list3都是非空则对list2做lpop并返回从list2中删除的元素。如果所有的list都是空或不存在,则会阻塞timeout秒, timeout为0表示一直阻塞。当阻塞时,如果有 client对key1…keyN中的任意key进行push操作, 则第一在这个key上被阻塞的client会立即返回。 如果超时发生, 则返回nil。有点像unix的select或者poll。brpop 同blpop,一个是从头部删除一个是从尾部删除。
brpop key1 …keyN timeout

List使用注意事项

Redis 五种数据类型详解

应用场景:

1.依赖List的数据具有顺序的特征对信息进行管理
2.使用队列模型解决多路信息汇总合并问题
3.使用栈模型解决最新消息的问题

Set

Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
存储大量的数据,高效的内部存储机制,便于查询。
Redis 五种数据类型详解

Set基本语法操作:

添加:

  1. sadd key member 添加一个 string 元素到 key 对应 set 集合中,成功返回 1,如果元素以及在集合中则返回0, key 对应的 set不存在则返回错误。
    查询:
  2. smembers key 返回 key 对应set 的所有元素,结果是无序的。
    删除:
  3. srem key member 从 key 对应 set 中移除指定元素,成功返回 1,如果 member 在集合中不存在或者 key不存在返回 0,如果 key对应的不是 set类型的值返回错误。
  4. spop key 删除并返回 key 对应 set 中随机的一个元素,如果 set 是空或者 key 不存在返回nil。
  5. srandmember key 同 spop,随机取 set中的一个元素,但是不删除元素。
  6. smove srckey dstkey member 从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。 成功返回 1,如果 member在 srckey中不存在返回 0, 如果 key 不是 set类型返回错误。
  7. scard key 返回 set的元素个数,如果 set是空或者 key不存在返回 0。
  8. sismember key member 判断 member 是否在 set 中,存在返回 1, 0 表示不存在或者 key 不存在。
  9. sinter key1 key2 …… keyN 返回所有给定key 的交集。
  10. sinterstore dstkey key1 … keyN 返回所有给定 key的交集, 并保存交集存到 dstkey下。
  11. sunion key1 key2 … keyN 返回所有给定 key的并集。
  12. sunionstore dstkey key1 …keyN 返回所有给定 key的并集, 并保存并集到 dstkey下。
  13. sdiffkey1 key2 …keyN 返回所有给定 key 的差集。
  14. sdiffstore dstkey key1 …keyN 返回所有给定 key的差集,并保存差集到 dstkey下。

Set使用操作注意事项

Set类型不允许数据重复,如果添加数据在set中已经存在,将只保留一份。
Set似然与hash的存储结构相同,但是无法启用hash的存储空间。

Set应用场景:

1.利用交集求共同好友。
2.利用唯一性,可以统计访问网站的所有独立IP。
3.好友推荐的时候根据tag求交集,大于某个threshold(临界值的)就可以推荐。
4.权限验证:
Redis 五种数据类型详解
5.黑白名单设定服务控制:
Redis 五种数据类型详解

Sorted_set

zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
存储空间:
Redis 五种数据类型详解

Sorted_set基本语法操作

 添加:

  1. zadd key score member 添加元素到集合,元素在集合中存在则更新对应 score。

 获取:
2. zrangekey start end 【WITHSCORES】类似 lrange操作从集合中去指定区间的元素。返回的是有序结果
3. zrevrange key start end 【WITHSCORES】同上,返回结果是按 score逆序的。

 删除:
4. zrem key member 删除指定元素, 1表示成功,如果元素不存在返回 0。

 获取集合数总量
5. zcount key min max 返回集合中 score在给定区间的数量。
6. zcard key 返回集合中元素个数。

 按条件获取数据:
7. zrangebyscore key min max 【WITHSCORES】【LIMIT】 返回集合中 score在给定区间的元素。
8. zrevrangebyscore key min max 【WITHSCORES】【LIMIT】 反向查

 按条件删除数据:
9. zremrangebyrank key min max 删除集合中排名在给定区间的元素。
10. zremrangebyscore key min max 删除集合中 score在给定区间的元素

 获取数据对应的索引(排名):
11. zrank key member 返回指定元素在集合中的排名(下标), 集合中元素是按 score从小到大排序的。
12. zrevrank key member 同上,但是集合中元素是按 score从大到小排序

 score值获取与修改
13. zincrby key incrmember 增加对应 member的 score值, 然后移动元素并保持 skip list保持有序。返回更新后的 score值。
14. zscore key element 返回给定元素对应的 score。

Sorted_set使用注意事项

Redis 五种数据类型详解

Sorted_set应用场景

1、排行榜 ----计数器组合排序功能对应的排名
2、带权重的消息队列
3、基础服务+增值服务类网站会设定会员试用及有效时间----
处理事件记录为score值,利用排序功能区分处理的先后顺序。

这儿附上一张材料教程上对各类数据类型应用场景的总结:

Redis 五种数据类型详解

参考:

菜鸟教程:https://www.runoob.com/redis/redis-data-types.html
传智播客黑马程序员公开课