#信息添加 功能:设置 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的数据具有顺序的特征对信息进行管理
使用队列模型解决多路信息汇总合并的问题
使用栈模型解决最新消息的问题
redis-第一节作业
最新推荐文章于 2024-07-15 17:23:34 发布