您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

redis-第一节作业

#信息添加  功能:设置 key,value 数据
set key value
#范例
set name itheima
#信息查询 功能:根据 key 查询对应的 value,如果不存在,返回空(nil)
get key
#范例
get name
#整体例子
set age 100
get age
#清除屏幕信息 功能:清除屏幕中的信息
clear
#退出客户端命令行模式 功能:退出客户端
quit
exit
< ESC >
#帮助 功能:获取命令帮助文档,获取组中所有命令信息名称
help 命令名称  help @组名
#范例
help get
   '''GET key  #命令的格式
  summary: Get the value of a key  #功能描述
  since: 1.0.0  #出现版本
  group: string   #所属群组'''
help set
#返回
'''SET key value [EX seconds] [PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0
  group: string'''

数据存储类型介绍
 string
 hash
 list
 set
 sorted_set
 数据类型实践案例

数据存储类型介绍
系统功能优化或升级
单服务器升级集群
Session 管理
Token 管理

Redis 数据类型(5种常用)
string          String
hash            HashMap
list            LinkedList
set             HashSet
sorted_set     TreeSet

redis 数据存储格式
redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储
数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串 Redis 存储空间 name age itheima 101 key value

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

string 类型数据的基本操作
添加/修改数据
set key value
例子:
set name pipi
获取数据
get key
例子:
get name
删除数据
del key
del name

添加/修改多个数据
mset key1 value1 key2 value2 …
例子:
mset a 123 name pipi age 80

获取多个数据
mget key1 key2 …
例子:
mget a  name age

获取数据字符个数(字符串长度)
strlen key
例子:
strlen name
追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
append key value
append name pp  #返回名字的追加串联

string 类型数据的扩展操作
大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键 id 必须保证统一性,不能重复。
Oracle 数据库具有 sequence 设定,可以解决该问题,但是 MySQL数据库并不具有类似的机制,那么如何解决?

设置数值数据增加指定范围的值
incr key
实例:
set num 1
incr num  #返回2
incr num  #返回3
incrby key increment
实例:
incrby num 10   #返回13  对num加10
incrbyfloat key increment  #对小数追加
incrbyfloat num 1.5  #返回14.5
设置数值数据减少指定范围的值
decr key
set num 20
decr num #返回19
decrby key increment
decrby num 10 #返回9

设置数据具有指定的生命周期
setex key seconds value
例子:
setex tel 10 1  #对tel值设置时间活10秒
psetex key milliseconds value
psetex tel 10 1 #对tel值设置时间活10毫秒

string 类型数据操作的注意事项
数据操作不成功的反馈与数据正常操作之间的差异
①表示运行结果是否成功
(integer) 0 → false 失败
(integer) 1 → true 成功
②表示运行结果值
(integer) 3 → 3 3个
(integer) 1 → 1 1个
数据未获取到 (nil)等同于null
数据最大存储量 512MB
数值计算最大范围(java中的long的最大值) 9223372036854775807

在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可
eg: user:id:3506728370:fans → 12210947
实例
set user:id:3506728370:fans 12210947

eg: user:id:3506728370:blogs → 6164
set user:id:3506728370:blogs 12210947
eg: user:id:3506728370:focuss → 83
set user:id:3506728370:focuss 12210947
在redis中以json格式存储大V用户信息,定时刷新(也可以使用hash类型)
eg: user:id:3506728370 →
{"id":3506728370,"name":"春晚","fans":12210862,"blogs":6164, "focus":83}
实例:
set user:id:00789 {id:00789,vkigs:789,,fansᆪᄎ123456789}
Tips 3:
redis应用于各种结构型和非结构型高热度数据访问加速
incr user:id:00789:fans

key 的设置约定
数据库中的热点数据key命名惯例
        表名      主键名     主键值     字段名
eg1:    order:  id:       29437595   name
eg2:    equip:  id:       390472345   type
eg3:    news:   id:       202004150   title


hash 类型数据的基本操作
添加/修改数据
hset key field value
实例
hset user name zhangsan
hset user age 38

获取数据
hget key field
实例
hget user name  #返回zhangsan

hgetall key
实例

hgetall user #返回所有数据
删除数据
hdel key field1[field2]
实例
hdel user name

添加/修改多个数据
hmset key field1 value1 field2 value2 …
hmset usesr name zhangsan age 38

获取多个数据
hmget key field1 field2 …
hmget user  name  age

获取哈希表中字段的数量
hlen key
实例
hlen user
获取哈希表中是否存在指定的字段
hexists key field
实例
hexists user age

 获取哈希表中所有的字段名或字段值
hkeys key
实例
hkeys user
hvals key

 设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrby user age 35  #年龄增加35
hincrbyfloat key field increment

hash 类型数据操作的注意事项
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil) hash 类型数据操作的注意事项
每个 hash 可以存储 232 - 1 个键值对
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈

当前仅仅是将数据存储到了redis中,并没有起到加速的作用,商品信息还需要二次查询数据库
每条购物车中的商品记录保存成两条field

field2专用于保存购物车中显示的信息,包含文字描述,图片地址,所属商家信息等
命名格式:商品id:info
保存数据:json
实例:
hmset 003 g01:nums 100 g01:info {...}
获取所有数据 hgetall 003

hsetnx key field value
例子:hsetnx 003 g05:nums 1  #对003用户增加  g05:nums 1


双11活动日,销售手机充值卡的商家对移动、联通、电信的30元、50元、100元商品推出抢购活动,每种商品抢购上限1000张
解决方案 :
以商家id作为key
将参与抢购的商品id作为field
将参与抢购的商品数量作为对应的value
抢购时使用降值的方式控制产品数量
实际业务中还有超卖等实际问题,这里不做讨论

redis 应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计

string存储对象(json)与hash存储对象
实例:
hmset p01 c30 1000 c50 1000 c100 1000
hincrby p01 c50 -1   #50卖了1张
hincrby p01 c100 -20 #100卖了20张
hgetall p01  #返回所有的结果


list 类型

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现

添加/修改数据
lpush key value1 [value2] ……
实例:
lpush list1 huawei
lpush list1 apple
lpush list1 microsoft

rpush key value1 [value2] ……
实例:
rpush list1 a b c  #同时增加三个数据


获取数据
lrange key start stop
实例
lrange list1 0 2  #查list1 0 到2的数据
lrange list1 0 -1  #查list1 0 到最后一个的数据

lindex key index
实例
lindex list1 0
llen key
实例
llen list1

获取并移除数据
lpop key
rpop key

规定时间内获取并移除数据
blpop key1 [key2] timeout
blpop list1 30  #30为时间,秒单位 等30秒
brpop key1 [key2] timeout(时间)
brpoplpush source destination timeout

移除指定数据
lrem key count(个数) value
实例:
rpush 001 a v c d e   #对001增加5个值为 a v c d e
lrange 001 0 -1    查询001的所有数据
lrem 001 1 a     对001删除一个数据a
lrange 001 0 -1 查询001的所有数据

twitter、新浪微博、腾讯微博中个人用户的关注列表需要按照用户的关注顺序进行展示,粉丝列表需要将最近关注的粉丝列在前面
新闻、资讯类网站如何将最新的新闻或资讯按照发生的时间顺序展示?
企业运营过程中,系统将产生出大量的运营数据,如何保障多台服务器操作日志的统一顺序输出?

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


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进