Redis基础-基本数据类型

基础命令

1.清屏和帮助

清屏:clear

获取当前时间:time

帮助:help 命令

2.退出客户端

命令:quit、exit、<esc>

业务数据的特殊性

原始业务功能设计

  • 秒杀
  • 618活动、双十一活动
  • 排队购票

运营平台监控到的突发高频率访问数据

突发时的时政要闻,被强势围观

高频复杂的统计数据

  • 在线人数
  • 投票排行榜

附加功能

系统功能优化和升级

  • 但服务器升级集群
  • Seeion管理
  • Token管理

常见的五种数据类型

Sting类型(字符)

  • 储存的数据:单个数据
  • 储存的格式:一个储存空间一个数据
  • 储存内容:通常字符串,如果以字符串以证书方式展示,则可以作为数字操作

String类型的基本操作

get、set、del(读取、写入、删除)

mset:添加或修改多个数据

mget:获取多个数据

strlen:获取数据长度(字符串的长度)

append:追加信息到原来的信息后面,如果原始信息存在就追加,否则就新建

String类型的数据拓展

业务场景

分表,使用多张表储存类型数据,但是对应的id必须保持统一性,不能重复

解决方案

incr、decr(数值自增自减,可以作为数据的唯一键

 

数据增加、减少指定范围的值

incrby、decrby(整数类型

incrbyfloat(小数类型)

String作为数值操作:

  • string类型在redis中就是个字符串,当遇到增减操作incr和decr是会转成数值计算
  • redis所有操作都是原子性,采用单线程处理所有业务,不用考虑并发。
  • 注:redis原始数据不能转成数值或超过一定的范围,也报错。

业务场景

海选投票,每个微信号每四个小时只能投一票

解决方案

设置数据具有一定的生命周期

setex:秒为单位, 设置phone存在的时间为10s,10s之后就为nil

psetex:毫秒为单位

 String类型操作注意事项

  数据操作反馈结果

  1. 标识结果是否运行成功 
    1. (integer) 0→false 失败
    2. (integer) 1→true  成功
  2. 表示运行结果值:
    1. (integer) 3→3  3个
    2.  (integer) 1→1 1个
  3. 数据为获取到
    1. nil等同于null
  4. 最大储存量512MB
  5. 最大范围long的最大值

 主页高频信息访问控制,微博粉丝数量和微博数量

key的设置约定

热点数据key命名

表名:主键命:主键值:字段名

例:set user:id:001:fans 1000000

        set user:id:001:blogs 1000000

        或者

        set user:id:001 {id:001,fans:1000000,blogs:1000000}

Hash类型(哈希)

存储需求:对一系列数据储存进行编组,方便管理,典型的对象存储

存储结构:一个储存空间保存多个键值对

hash类型:使用哈希表存储结构

Hash类型基本操作

hset:添加修改

hget:获取数据

hsetall:获取全部数据

hdel:删除数据

hmset:添加修改多个数据

hmget:获取多个数据

hlen:获取哈希表中的字段的数量

hexists:获取哈希表中是否存在指定的字段

 

Hash类型拓展操作

业务场景

实现抢购、实现购物车功能

解决方案

 hkeys:获取哈希表中字段名

 hvals:获取哈希表中的字段值

 hincrby:指定字段数值增加指定范围的值

 hincrbyfloat:浮点型数值增加指定范围的值

 

Hash类型注意

hash类型只能存储字符串,不允许其他类型,不存在嵌套现象。如果未获取到数据则为nil

hash存储232-1键值对

hash贴近对象存储形式,不要存储大量的对象数据,更不要作为对象列表使用

hgetall如果内部字段(field)太多,遍历整体数据效率太低,可能成为数据访问瓶颈

List类型(列表)

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分

需要的存储结构:一个存储空间保存多个数据,且通过数据可以提现进入顺序

list类型:保存多个数据,底层使用双向链表存储结构实现

List类型数据基本操作

lpush:从左进去添加/修改数据

rpush:从右进去添加/修改数据

lrange:获取数据,如果左边先进去,从0开始,name获取最后存入的数据。从左进去,获取全部数据(0到-1)。

lindex:通过索引获取

llen:key长度

lpop:从左获取并移除

rpop:从右获取并移除

 

List类型数据拓展操作

blpop:从左边开始,规定时间内获取并移除数据;规定时间内添加新数据也会取出来

brpop:从右边开始,规定时间内获取并移除数据

业务场景

例如朋友圈中取消点赞

解决方案:

lrem:移除指定数据

 

List类型数据注意事项

List类型保存的数据都是string类型,数据总容量是有限的,最多232-1个元素

List具有索引概念,获取全部的数据结束索引设置成-1

List可以对数据进行分页操作,通常第一页来自于list,第二页以及更多的通过数据库形式加载

Set类型数据

存储需求:存储大量的数据,查询方面提升更高的效率

存储结构:能够保存大量的数据,高效的内存存储机制,便于查询

set类型:与hash类型相同,仅储存键值,不存储值(nil),重复值不允许

Set类型数据基本操作

sadd:添加值

smembers:获取全部数据

srem:删除值

scard:获取集合数据总量

sismember:判断集合中是否包含指定数据

Set类型数据拓展操作

业务场景

每位用户使用今日头条时会设置三项内容,后期为了增加用户活跃度、兴趣点、让用户对其他内容产生兴趣,增加客户存留度

redis应用于随机类检索,热点新闻推荐、热点歌曲推荐、热卖旅游线路、推荐app、大v推荐

解决方案:

srandmember:随机获取集合中指定数量的数据

spop:随机获取集合中某个数据并将改数据移除集合

 业务场景

 qq好友推荐、微信公众号推荐、饿了吗美食推荐

解决方案

sinter:求交集

sunion:求并集

sdiff:求差集

sinterstore:求交集并存储指定集合中

sunionstore:求并集并存储到指定结合中

sdiffstore:求差集并存储到指定集合中

smove:将指定数据从原始移到目标集合

Set类型数据注意事项

set类型不予许重复,如果数据已存在则只保留一份

set结构虽然和hash存储结构相同,但是无法启用hash中存储空间

Sorted_set类型数据

存储需求:数据排序有利于数据有效展示,需要提供一种可以根据自身特性的排序方式

存储结构:新的存储结构,可以保存排序的数据

set类型:在set存储基础上添加可排序字段

Sorted_set类型数据基本操作

zadd:添加数据

zrange:获取全部数据

zrevrange:反向获取全部数据

zrem:删除数据

 zrangebyscore:按条件查询,limit 0 3,从索引0开始取数

 zrevrangebyscore:反向,按条件取数

 zremrangebyscore:按条件删除

 zremrangebyrank:按索引删除

zcard:获取集合总量

zcount:根据条件获取结合总量

 zinterstore:集合交集,默认相加,还可以获取max,或者min

 zunionstore:集合并集,重复的默认相加,同样可以获取max,或者min

Sorted_Set类型数据拓展操作

业务场景

各类综艺海选投票、各类资源网站Top10、游戏好友亲密度

解决方案

zrank:正向插叙,获取数据对应索引

zrevrank:反向查询,获取数据对应索引

 zscore:值获取

 zincrby:增加指定的数据,或者修改数据

Sorted_Set类型数据操作注意事项

Sorted_Set储存空间是64位,保存数据也可是一个双精度double值,基于双精度浮点特征,但也有可能丢失精度

Sorted_Set底层还是基于set结构,因此数据不能重复,如果重复则可能覆盖前面的,保留最后一次修改结果

原文地址:https://www.cnblogs.com/-zzc/p/13341961.html