redis string

redis

业务数据的特殊性

1 原始业务功能设计
秒杀活动
6.18,双十一
12306购票
2. 运营平台监控到的突发高频访问数据
微博热搜
3. 高频,复杂的数据统计
直播在线人数
投票活动
4 .附加功能
系统升级优化
单服务器升级集群
session和token管理

redis数据类型(5种常见)

string ,hash ,list ,set, sorted_set

string

reids数据存储格式

  • redis 自身就是一个map,其中所有的数据都是采用的key:value的形式存储

  • 数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串,我们所讲的数据类型永远都是value

string

  • 数据的格式:单个数据。最简单的 数据存储类型,也就是最常见的数据存储类型
  • 存储数据的格式:一个存储空间保存一个数据
  • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

基本操作

单条数据

添加/修改数据
set key value
获取数据
get key
删除数据
del key

多条数据

添加数据(mset key1 value1 key2 value2)
	mset book zzz price 18
    
    
获取多条数据(mget key1 key2)
    mget book price
    1) "zzz"
    2) "18"
    
获取数据字符个数(长度)
    strlen book
    (integer) 3
    
追加信息到原始信息候补(数据不存在就新建append key value)

    127.0.0.1:6379> append book cc
	(integer) 5
	127.0.0.1:6379> get book
	"zzzcc"

注意:单数据和多数据操作区别:数据发送到redis需要时间,redis执行需要时间,返回结果也要时间

 单指令:时间*6 + 时间*3
 多条:时间*2 + 时间*3
    

string类型数据操作的注意事项

  • 数据操作不成功的反馈与数据正常数据之间的差异

  • 数据未获取到nul

  • 数据最大存储量512mb

  • 数值计算最大范围

string业务扩展

第一种

假设在一个大型企业应用种,分表操作是最基本操作,使用多张表同时存储同类型数据,但是对应的主键id必须保证同一性,不能重复,oracle数据库具有sequence设定,可以解决该问题,但是mysql数据库并不具备类似的机制,如果解决

可以分表
但是主键会重复,在oracle有序列的概念,但是mysql没有,reids可以解决,分成若干张表保证id不重复,

解决方案

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

    incr key(依次+1)
    incrby key increment(指定+数值)
    incrbyfloat key increment(+小数,浮点数)
    
    # incr key
    127.0.0.1:6379> get num
    "2"
    127.0.0.1:6379> incr num
    (integer) 3
    127.0.0.1:6379> incr num
    (integer) 4
    127.0.0.1:6379> decr num
    (integer) 3
    
    # incrby key increment
    127.0.0.1:6379> incrby num 10
    (integer) 13
    
    incrbyfloat key increment
    127.0.0.1:6379>  incrbyfloat num 1.5
    "14.5"
    
  • 设置数值数据减少指定范围的值

    decr key
    decr key increment
    
    127.0.0.1:6379> decr num
    (integer) 3
    

    string作为数值操作

    • string 在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算
    • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响
    • reids用于控制数据库表主键id,为数据库主键提供生成策略,保障数据库表的主键唯一性
    • 此方案适合所有数据库,并且支持数据集群

第二种

最强女生启动海选头片,只能通过微信投票,每个微信号每4小时只能投1票,电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门只能维持3天,三天后自动取消热门,新闻网站会出现热点新闻,热点新闻最大的特征时效性,如何地洞控制热点新闻的时效性

解决方案

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

setex key seconds value
psetex key millisecond value

setex key seconds value(s为单位)
127.0.0.1:6379> setex tel 3 1
OK
127.0.0.1:6379> get tel
(nil)

127.0.0.1:6379> set tel 2
OK
这样的话上面的值就会被覆盖 
```
  • redis控制数据的生命周期,通过数据是否失效控制业务行为,使用所有具有时效限制控制操作

第三种

主页高频范文信息显示控制,如新浪微博大V主页显示粉丝和微博数量

解决方案

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

    表名:主键名:主键值:属性名 这些作为它的key 37384这个是粉丝
    
    127.0.0.1:6379>  set user:id:0089:fans 123456789
    OK
    
    127.0.0.1:6379> set user:id:0089:blog 676
    OK
    
  • 在redis以json格式存储大V用户信息,定时刷新,

    127.0.0.1:6379> set user:id:0089 {id:0089,blog:676,fans:123456789}
    OK 
    

    区别:第一种可以直接操作改变它的数据方便,第二种必须先去出来才可以,一改全改

  • redis应用于各种结构型和非结构型高热度数据访问加速

  • key的设置约定 数据库种的热点数据key命名惯例

    	表名:  主键名: 主键值:  字段名
    eg  order:  id:   667788:  name
    eg2  news:  id:   76589:   title
    
posted @ 2020-07-19 23:39  小子,你摊上事了  阅读(67)  评论(0编辑  收藏  举报