Redis数据类型(5种常用类型)

  • string String
  • hash HashMap
  • list LinkedList
  • set HashSet
  • sorted_set TreeSet

1) string

  • 添加/修改数据 set key/value
  • 获取/删除数据 get/del key
  • 添加/修改多个数据 mset key1 value1 key2 value2 ...
  • 获取多个数据 mget key1 key2
  • 获取数据字符个数(字符串长度) strlen key
  • 追加信息到原始信息后部(如果原始信息存在就追加,否则新建) append key value
  • 设置数值数据增加指定范围的值(incrementb:增加的幅度) incr key | incrby key increment | incrbyfloat key increment
  • 设置数值数据减少指定范围的值 decr key | decrby key increment
  • 设置数据具有指定的生命周期 setex key seconds value|psetex key milliseconds value

业务场景1

主页高频访问信息显示控制,例如定期更新某B站Up主个人页面显示的视频播放数和收到的点赞数

redis存储的数据是那种形式_数据类型

  • 在redis中为该up主设定用户信息,以用户主键id和属性值(点赞数、播放数)设置为key,value即为对应的点赞数、播放数。后台设定定时刷新数据(即从Redis中重新读取该对应数据即可)
  • 在redis中以json数据格式存储,同样定时刷新
  • redis存储的数据是那种形式_获取数据_02

  • 业务场景2
    在网站中要使用判断手机号到账号中时,一般都会通过发送验证码的形式来进行绑定,并且有些发送的验证码会提示5分钟内有效
  • redis存储的数据是那种形式_redis存储的数据是那种形式_03

    redis存储的数据是那种形式_数据类型_04

2)hash

  • 添加/修改数据 hset key field value
  • 获取数据/获取全部数据 hget key field | hgetall key
  • 删除数据(可删除多个) hdel key fields [fields]
  • 添加/修改多个数据 hmset key field1 value1 field2 value2 .....
  • 获取多个数据 hmget key field1 field2 ...
  • 获取哈希表中字段的数量 hlen key
  • 获取哈希表中是否存在指定的字段 hexists key field
  • 获取哈希表中所有的字段名或字段值 hkeys key | hvals key
  • 设置指定字段的数值数据增加自动范围的值 hincrby key field increment | hincrbyfloat key field increment

业务场景

电商网站购物车设计与实现

redis存储的数据是那种形式_获取数据_05


redis存储的数据是那种形式_redis存储的数据是那种形式_06

3)list

  • 添加/修改数据 lpush/rpush key value1 [value2] ....
  • 获取数据 lrange key start stop | lindex key index | llen key
  • 获取并移除数据 lpop/rpop key
  • 规定时间内获取并移除数据 blpop/brpop key1 [key2] timeout | brpoplpush source destination timeout
  • 移除指定数据 lrem key count value

业务场景1

微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息

如果取消点赞,移除对应好友信息

redis存储的数据是那种形式_数据_07

redis存储的数据是那种形式_数据类型_08

4)set

  • 添加数据 sadd key member1 [member2]....
  • 获取全部数据 smembers key
  • 删除数据 srem key member1 [member2].....
  • 获取集合数据总量 scard key
  • 判断集合中是否包含指定数据 sismember key member
  • 随机获取集合中指定数量的数据 srandmember key [count]
  • 随机获取集合中某个数据并将该数据移出集合 spop key [count]
  • 求两个集合的交、并、差集 | 求两个集合的交、并、差集并存储到指定集合中
    1) sinter key1 [key2] | sinterstore destination key1 [key2] 2) sunion key1 [key2] | sunionstore destination key1 [key2] 3) sdiff key1 [key2] | sdiffstore destination key1 [key2]
  • 将指定数据从原始集合中移动到目标集合中 smove source destination member

业务场景1

网易云中的每日歌曲推荐中,都会根据用户平常听歌的种类随机推荐相关的热门歌曲(或是热点新闻推荐、热卖旅游线路等等)

redis存储的数据是那种形式_数据_09

业务场景2

QQ会通过显示和其他好友有多少个共同好友来帮助用户快速积累好友用户带来更多的活跃度,又或是微信公众号上会显示有多少位朋友关注了该公众号

redis存储的数据是那种形式_数据_10


redis存储的数据是那种形式_数据_11

redis存储的数据是那种形式_数据类型_12


业务场景3

通过统计某一网站的访问量(这里假设通过统计网站被不同的IP地址访问的总次数,相同IP不同用户访问时IP不变)

redis存储的数据是那种形式_数据类型_13

5)sorted_set

  • 添加数据 zadd key score1 member1 [score2 member2]
  • 获取全部数据(顺序/逆序) zrange/zrevrange key start stop [WITHSCORES]
  • 删除数据 zrem key member [member...]
  • 按条件获取数据 zrangebyscore key min [WITHSCORES] [LIMIT] | zrevrangebyscore key max min [WITHSCORES]
  • 按条件删除数据 zremrangebyrank key start stop | zremrangebyscore key min max
  • 获取集合数据总量(min、max表示范围) zcard key | zcount key min max
  • 集合交、并操作
  1. zinterstore destination numkeys key [key ... ]
  2. zunionstore destination numkeys key [key ... ]
  • 获取数据对应的索引(排名) zrank/zrevrank key member
  • score值获取与修改 zscore key member | zincrby key increment member

业务场景

淘宝、京东有时为了刺激消费,会发放些优惠券给用户,但这些优惠券也是有使用期限的,这里就可以通过该数据类型来有效管理相关优惠券过期的信息

redis存储的数据是那种形式_数据_14