Redis 的基本操作
作为缓存使用
- 原yun始业务功能设计
- 秒杀
- 618活动
- 春节买票
- 运营平台监控到的突发高频访问数据
- 突发时政要闻,被强势关注
- 高频,复杂的统计数据
- 在线人数
key的命名规范
数据库中的热点数据key命名惯例
命令行模式工具
清除屏幕信息
clear
添加信息
功能:设置key,value数据
命令:set key value
示范:
127.0.0.1:6379> set key value OK 127.0.0.1:6379> set name set OK
查询信息
127.0.0.1:6379> get name "set"
当查询到的key不存在时报的信息
127.0.0.1:6379> get set (nil)
数据存储类型(value)
redis 数据存储格式
- redis自身是一个Map,其中所以的数据都是采用key:value的形式存储
- 数据库指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串
string
- 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
- 存储数据的格式:一个存储空间保存一个数据
- 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
- string作为数值操作,redis所以的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响
- 数据最大存储量:512MB
string 类型数据的基本操作
- 添加/修改数据
127.0.0.1:6379> set kk 123 OK
- 获取数据
127.0.0.1:6379> get kk "123"
- 删除数据
127.0.0.1:6379> del kk (integer) 1
- 添加/修改多个数据
127.0.0.1:6379> mset kk 1 ll 2 pp 3 OK 127.0.0.1:6379> get kk "1" 127.0.0.1:6379> get ll "2"
- 获取多个数据
127.0.0.1:6379> mget kk ll pp 1) "1" 2) "2" 3) "3"
- 获取数据字符长度
127.0.0.1:6379> set oo sdfdsfsdgs OK 127.0.0.1:6379> strlen oo (integer) 10
- 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
127.0.0.1:6379> append kk 2233 (integer) 5 127.0.0.1:6379> get kk "12233"
string类型数据的扩展操作
大型企业级应用中,分表操作是基本此操作, 使用多张表存储同类型数据,但是对于的主键ID必须保证统一性,不能重复,Oracle数据库具有seqience设定,可以解决该 问题,但是Mysql数据库并不具有类似的机制,那么如何解决?
解决方法
- 设置数值数据增加指定范围的值
- incr 就是key如果是数字的话,每执行一次增加1
127.0.0.1:6379> incr kk (integer) 12234 127.0.0.1:6379> incr kk (integer) 12235 127.0.0.1:6379> incr kk (integer) 12236
- incrby 就是key如果是数字的话,每次执行增加指定
127.0.0.1:6379> get pp "7" 127.0.0.1:6379> incrby pp 100 (integer) 107 127.0.0.1:6379> get pp "107"
- 设置数值数据减少指定范围的值【可以是复数】
- decr key 就是key如果是数字的话,每执行一次减少1
- decrby 就是key如果是数字的话,每次执行减少指定
127.0.0.1:6379> get pp "107" 127.0.0.1:6379> decrby pp 100 (integer) 7 127.0.0.1:6379> get pp "7"
业务场景
“最强女生”启动海选投票,只能通过微信投票,每个微信号每4小时只能投1票
电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门,新闻网站会出现热点新闻,热点新闻最大的特征是时效性,如何自动控制热点新闻的时效性
解决方案:
- 设置数据具有指定的生命周期
- setex key 时间(s)value
127.0.0.1:6379> setex mn 10 22 OK 127.0.0.1:6379> get mn "22" 127.0.0.1:6379> get mn (nil)
- psetex 是毫秒
- psetex key 时间 xxx
业务场景
主页高频访问信息控制,例如新浪微博大V主页显示粉丝数量
解决方式:
- 在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可
//表名user:id号:规定是什么(数量) 127.0.0.1:6379> set user:id:00789:ran 12345565 OK 127.0.0.1:6379> get user:id:00789:ran "12345565"
hash 类型
新的存储需求
- 对一系列存储的数据进行编组,方便管理,典型 应用存储对象信息
- 需要的存储结构:一个存储空间保存多个键值对数据
需要的存储结构
- 一个存储空间保存多个键值对数据
存储的困惑
对象类数据的存储如果具有频繁的更新需求操作会显得笨重
存储空间里的key=field,field+value=hash
hash的存储结构
- 如果field数量减少,存储结构优化为类数组结构
- 如果field数量较多,存储结构使用Hash Map结构
hash类型数据的基本操作
- 添加/修改数据
//hset key field value 127.0.0.1:6379> hset user name wowo (integer) 0 127.0.0.1:6379> hset user kk ww (integer) 1 127.0.0.1:6379> hset user oo 123 (integer) 1
- 获取数据
127.0.0.1:6379> hget user name
"wowo"
127.0.0.1:6379> hget user noo
(nil)
127.0.0.1:6379> hget user oo
"123"
127.0.0.1:6379> hget user kk
"ww"
127.0.0.1:6379> hgetall user
1) "name"
2) "wowo"
3) "kk"
4) "ww"
5) "oo"
6) "123"
- 删除数据
127.0.0.1:6379> hgetall user 1) "name" 2) "wowo" 3) "kk" 4) "ww" 5) "oo" 6) "123" 127.0.0.1:6379> hdel user kk (integer) 1 127.0.0.1:6379> hgetall user 1) "name" 2) "wowo" 3) "oo" 4) "123"
- 添加/修改多个数据
hmset key field1 value1 field2 value2 field3 value3
- 获取多个数据
hmget key field1 field2 ..
- 获取哈希表中的字段数量
hlen key
- 获取哈希表中是否存在指定的字段
hexists key field
1
list
set
sorted_set
继续阅读

我的微信
这是我的微信扫一扫
评论