Redis入门day01-基本数据类型

Redis是键值数据库,所以redis本身就是map并且key只能为String类型,五种数据类型是指value存储的数据类型。

Redis的五种基本数据类型(还有其它的数据类型,这五种是最常用的)

1.string  2.hash  3.list 4.set 5.sorted_set

 一、String类型

说明:value存储的就是一个String类型的数据

基本操作:

·添加修改操作

set key value

 案例演示:

set name lzywl
get name
set name lzpyy
get name

·获取操作

get key

·删除操作

del key

 在redis中1表示true,0表示false

·添加\修改多个数据

mset key1 value1 key2 value2 ...

 ​​

·获取多个数据

get key1 key2 ...

·获取数据字符个数(字符串长度)

strlen key

·追加信息到原始信息的后部(如果原始信息存在则追加,不存在则创建)

append key value

 返回结果是:追加之后的字符总长度

set与mset的比较:

同样是存储三条数据,使用set的话,发送消息和接收反馈消息的时间是要比mset耗时

 String数据类型的应用场景1:

在大型企业级应用中,分表操作是基本操作,使用多张表存储相同的数据类型,但是在mysql中主键是自增长的,如何保证主键不重复呢?此时就可以使用redis的String数据类型来保存主键重复的问题

解决方案:

·设置数值数据增加指定范围的值

incr key // 默认增加1
incrby key increment //按指定值增加
incrbyfloat key increment //按指定的增加,此值为float类型 

 ·设置数值数据减少指定范围的值

decr key //默认减少1
decrby key decrement //按指定值减少

 

 String作为数值类型的说明:

①String数据类型存储的是一个字符串,但遇到incr、decr将会转化为数值进行计算

②Redis中的操作都是原子操作,采用单线程处理业务,因此不需要考虑并发带来的影响

③String存储的字符串数据转化成数值失败或者超出了redis数值的上限值则会报错,redis数值的上限值为9223372036854775807(java中long数据类型的最大值,java.MAX_VALUE)

 String数据类型的应用场景2:

"最强女生"启动海选投票,只能通过微信投票,每个微信号每4个小时只能投1票

电商商家开启热点商品推荐,热门商品不能一直处于热门期,每种商品热门维持3天,3天后自动取消热门

新闻网站会出现热点新闻,热点新闻最大的特征就是时效性,如何自动控制热点新闻的时效性

解决方案:

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

setex  key seconds  value //设置数据的生命周期,单位为毫秒
psetex key milliseconds value //设置数据的生命周期,单位为毫秒

 

 

String数据类型操作的注意事项: 

1.数据操作失败的反馈与数据正常操作之间的差异

         ①表示运行成功

                (Integer)0 -> false   失败

                (Integer)1 -> true     成功

        ②表示运行结果

                (Integer)3 ->3   3个

                (Integer)1 ->1   1个

2.数据未获取到

        (nil)  -> null

3.数据最大存储量

        512MB

4.数据计算最大范围

        java中long的最大值 ->9223372036854775807

业务场景:

主页高频访问信息控制,例如新浪微博大v主页显示粉丝数与微博数量

 解决方案:

·在redis中为大v用户设定用户信息,以用户主键和属性作为key,后台设定定时刷新策略即可

 ·在redis以json格式存储大v的信息,定时刷新(也可以使用hash类型)

 

redis中key设置的约定: 

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

example      order  :      id         :   1234566 :   name

Redis数据类型之hash

针对于对象数据类型采用json类型存储,对于频繁的更新的话会显的很笨重,因此,可以使用hash来存储

存储结构hash的说明:

①对一系列存储的数据进行编组,方便管理,典型的用于存储对象数据类型

②一个存储空间内保存多个键值对数据

③底层使用哈希表结构实现数据存储 

hash在redis中的存储结构:

 hash存储结构的优化:

①如果field数量较少,存储结构优化为类数组结构

②如果field数量较多,存储结构使用hashMap结构

hash数据类型的基本操作:

·添加/修改数据

hset key field value

说明:虽然更改数据时显示的是(Integer)0但是会进行一个数据的替换

·查询数据

hget key field

·删除数据

hdel key field

 ·添加/更新多个数据

hmset key field value field value ...

·查看多个数据

hmget key field field ...

·获取hash表中字段的数量

hlen key

 ·判断hash表中是否存在指定字段

hash类型数据的扩展操作: 

·获取哈希表中的所有字段名或字段值

hkeys key
hvals key

·指定hash表中的字段值增加指定范围的数值 

hincrby kye field increment
hincrbyfloat key field increment

hash数据类型的说明: 

1.hash类型下的value只能存储字符串类型的数据,不能存储其它数据类型,如果为获取到则值为nil

2.每个hash可以存储2^32-1个键值对

3.hash类型十分贴近存储对象数据类型,并且可以灵活删除对象属性,但hash设计的初衷不是为了存储大量对象而设计的,切记不可滥用,更不可将hash作为对象列表使用

4.使用hgetall操作可以获取全部属性,如果内部的field过多,遍历整体数据效率会很低,有可能成为数据访问的瓶颈

hash数据类型的应用场景一:

购物车中的数据存储就可以使用hash:

 ①模拟购物车的添加

②模拟查看购物车 

 ③模拟商品数量的增加/减少

④模拟购物车商品删除 

⑤清空购物车 

业务场景一中存在的问题:商品信息需要二次查询数据库,并没有实现数据加速的效果 

解决方案:

①将购物车中的每条商品记录保存成两个field的

②第一个field的用于存放商品的数量

③第二个field用于存放商品的信息,例如:文字描述、图片地址、所属商家

         使用json数据进行一个保存

业务场景二:

双十一,运营商公司推出30元、50元、100元商品抢购活动,限量1000张

解决方案:

①运营商公司作为key

②商品类型作为field

③限制数量作为value

 

Redis数据类型之list:

list说明:

①存储多个数据,对数据进入存储空间的顺序进行区分

②一个存储空间可以保存多个数据,且通过数据可以体现进入的顺序

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

list类型数据的基本操作:

·添加/修改数据

lpush key value value value ...
rpush key value value value ...

·获取数据

lrange key start end  //获取list元素
lindex key index    //获取某个位置上list的元素
llen key           //获取list的添加元素的个数

 

 

·获取并移除数据

lpop key
rpop key

 ·list规定时间内获取并移除数据

blpop key timeout
brpop key timeout
brpoplpush source destination timeout

 b:即为blocking,它可以等

 

 

 

list数据类型的应用场景一: 

微信朋友圈点赞,要求按照点赞顺序显示好友信息,取消点赞则移除对应的好友信息

解决方案: 

 

list类型数据的操作事项: 

1.list保存的都是String数据类型,总量为2^32-1

2.list具有索引的概念,但是操作数据时通常以队列的的形式入队出队,或以栈的形式入栈出栈

3.获取全部数据时结束索引设置为-1

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

list的业务场景二:

Twitter、微博中个人用户的关注列表需要按照用户的关注顺序进行展示,粉丝列表需要将最新关注的粉丝列在前面

新闻、咨询类网站如何将最新的新闻或咨询按照发生的时间顺序展示? 

企业系统运营中,系统将产生大量的运营数据,如何保障多台服务器操作日志的统一顺序输出?

解决方案: 

1.依赖于list存储数据的顺序的特征对信息进行管理

2.使用队列模型模型解决多路信息汇总的合并的问题

3.使用栈模型解决最新消息的问题

 Redis数据类型之set

说明:

①可用于存储大量的数据,高效的内部存储机制,便于查询

②结构与hash一样,但是只存储键值,value的值为nil,并且值不允许重复

set数据类型的基本操作:

·添加数据

sadd value value ...

 

·获取数据

smembers key

  

·删除数据

srem key value value...

 

 ·获取set元素个数

scard key

·判断set是否含有

sismember key value

 

set 的业务场景一:

用户首次使用今日头条时会设置3项爱好,但是为了后期增加用户的活跃度、兴趣点、必须让用户对其它信息类别产生兴趣,增加用户留存度,如何实现?

脉脉为了促进用户间的交流,保障业务成单率的提升,需要让每位用户拥有大量的好友,事实上职场新人不
具有更多的职场好友,如何快速为用户积累更多的好友?
新浪微博为了增加用户热度,提高用户留存性,需要微博用户在关注更多的人,以此获得更多的信息或热门
话题,如何提高用户关注他人的总量?
QQ新用户入网年龄越来越低,这些用户的朋友圈交际圈非常小,往往集中在一所学校甚至一个班级中,如何
帮助用户快速积累好友用户带来更多的活跃度?
微信公众号是微信信息流通的渠道之一,增加用户关注的公众号成为提高用户活跃度的一种方式,如何帮助
用户积累更多关注的公众号?
美团外卖为了提升成单量,必须帮助用户挖掘美食需求,如何推荐给用户最适合自己的美食?

业务分析:

①系统分析出各个分类的最新或最热点的信息条目并组织成set集合

②随机挑选出其中的部分信息

③配合用户关注信息分类中的热点信息组织成展示的全信息集合

解决方案:

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

srandmember key count

·随机获取集合中的某个数据并将该数据移除集合

spop key count

 

 set类型数据的扩展操作:

·求两个集合交、并、差集

sinter key1  key2  //集合的交集
sunion key1 key2  //集合的并集
sdiff key1 key2  //集合的差集

 

·求两个集合交、并、差集并存储到指定集合中:

sinterstore destination key1 key2 
sunionstore destination key1 key2
sdiffstore destination key1 key2

 

 

 ·将原始集合中的数据移动到目标集合中

 

 

 set数据类型使用的注意事项:

1.set虽然不允许数据的重复,如果添加的数据在set中已经存在,将只保留一份

2.虽然set的存储结构与hash的一致,但是无法启用value的存储空间

set的业务场景一:

公司对旗下新的网站做推广,统计网站的PV(访问量),UV(独立访客),IP(独立IP)。
PV:网站被访问次数,可通过刷新页面提高访问量
UV:网站被不同用户访问的次数,可通过cookie统计访问量,相同用户切换IP地址,UV不变
IP:网站被不同IP地址访问的总次数,可通过IP地址统计访问量,相同IP不同用户访问,IP不变

 

解决方案:
①利用集合去重的特性,记录各种访问量
②建立String类型数据,利用incr统计日访问量
③建立set模型,记录不同的cookie数量
④建立set模型,记录不同ip数量

Redis数据类型之sorted_set:

说明:

1.可以保存可排序的数据

2.在set的基础上添加了可排序字段

 set数据类型的基本操作:

·添加数据

zadd key score1 member1 score2 member2 ...

·获取数据

zrange key start end [withscores]
zrevrange key start end [withscores]

·删除数据

zrem key member ...

 

·按照条件获取数据 

zrangebyscore key  min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]

 

·按照条件删除 

zremrangebyrank key start end //[start,end]
zremrangebyscore key min max 

 

·获取集合数据的总量

zcard key
zcount key min max

 

·集合的交、并操作

zinterstore destination numberkeys key1 key2 key3 ...[aggregate min|max]
zunionstore destinaion numberkeys key1 key2 key3 ...[aggregate min|max]

 

 

 sorted_set数据类型的业务场景分析:为所有参与排名的资源建立排序依据

票选广东十大杰出青年,各类综艺选修海选投票

各类资源网站TOP10

聊天室活跃度统计

游戏好友亲密度

解决方案: 

①获取数据对应的排序

zrange key start end [withscores]
zrevrange key start end [withscores]

②获取score的值并修改

zscore key member
zincrby key increment member

sorted_set类型数据操作的注意事项: 

1.score保存的数据范围是64位

2.score可以保存双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时要慎重

3.sorted_set底层还是set,不能保存重复的值,如果保存相同的值,score的值会被反复覆盖,以最后一次覆盖为准

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值