String 类型

1.可以处理字符串

set k1 hello(为键k1设置值hello)
get k1(获取k1的键里面对应的值)
APPEND k1 aabb(为k1键追加内容)
STRLEN k1 (查询键k1的值的字符长度)

2.处理数值计算(数值的增减)

INCR  场景:统计,限流,点赞,
DECR

3.bitmap(二进制位的位图操作)

SETBIT k2 1 1(为k2做便宜量为1的位置设置为1,对应ascii码里面就是@字符)
getbit k2 1(获取k2的偏移量为1的位置的数值(二进制的数值))set k3 8
setbit k3 7 1 (8对应ascii码里面是56,再在最后一位设置为1,那么k3就变成9了)setbit k4 999 1(偏移量超过1个字节了,那么后面差的会自动补全(扩容))bitcount k4 0 0(k4的第一个字节(8个二进制数据里面)有多少个1)bitcount k4 0 -1 (k4的所有二进制中有多少个1)
setbit k1 1 1
setbit k1 7 1
setbit k2 1 1
setbit k2 6 1
(以上设置k1和k2分别为 0 1 0 0 0 0 0 1,0 1 0 0 0 0 1 0)按位与,结果为  0 1 0 0 0 0 0 0
BITOP and keyAnd k1 k2按位或,结果为 0 1 0 0 0 0 1 1
BITOP or keyOr k1 k2

使用场景一:
任意用户,任意时间窗口内,登录天数

setbit username1 2 1(代表在当年第2天登录了)
setbit username1 364 1 (代表在第365天登录了)
BITCOUNT username1 0 -1(获取全年登录的总天数)
STRLEN username1(获取当年的数据大小(46个字节,100年也就4k大小))

如果有2亿用户,需要在618附近登录的人就送礼物,问需要备多少份礼物?
分析:2亿用户有僵死用户,需要知道活跃用户数。最好是能够有任意时间窗口的数据。
做个数据的旋转,key为时间,value的偏移为用户

setbit 20200101 1 1(2020年1月1日,1号用户登录了)
setbit 20200101 8 1(2020年1月1日,8号用户登录了)
setbit 20200102 8 1(2020年1月2日,8号用户登录了)
BITOP or result 20200101 20200102(这两天按位或)
BITCOUNT result 0 -1(就是活跃用户的数)

List 类型

list是链表结构的,且key持有list的第一个元素和最后一个元素,所以list可以很快的从头部和尾部插入数据

lpush k1 a b c d e (他们压入的顺序是从左边压入,所以最终的效果是 e d c b a)
lrange k1 0 -1(打印出来的是e d c b a)
rpush k1 x y z(从右边压入)弹出命令:
lpop k1(从左边弹出)
rpop k1(从右边弹出)
可以实现:
后进先出:栈
先进先出:队列
数组
链表数组的例子:
LINDEX k1 3(模拟数组,取下标为3的数据)LTRIM k1 0 -1(删除k1从0到-1之外的东西,此时没有删除任何东西)
LTRIM k1 0 3(只保留0到3的数据,类似于JAVA的subList())
应用:
评论列表,可以使用这种方式分页可以将JAVA程序中的数组,迁出到redis里面去,这样如果多个tomcat容器里面就不存,使用tomcat集群的时候,就可以取redis里面去操作数组

Hash类型(类似于HashMap)

hset k1 name zz(为hash类型的设置name键的值为zz)
hset k1 age 18(为hash类型的设置age键的值为18)hget k1 name(获取k1中的键为name的值)
hget k1 age(获取k1中的键为age的值)
hgetall  k1(获取k1的所有的键值对)
hkeys k1(获取k1的键的集合)
hvals k1(获取k1的值的集合)hincrby k1 age -1(数值计算,将年龄-1)

应用场景:

商城商品详情页--聚合数据(商品,详情,订单,评价)统计值范畴(粉丝数,点赞数,购物数)

Set 类型

集合:无序,不可重复

sadd k1 aabb bbaa abab baba abba baab aabb(给集合k1添加数据,此处的aabb是有两个,会自动去重)
smembers k1(可以拿到刚刚存进去的数据,结果为baba bbaa baab aabb abba abab,顺序已经打乱了)
OBJECT encoding k1(获取数据的类型,结果为hashtable)
type k1(k1的类型,结果为set)SRANDMEMBER k1 3(最后一个数据,如果是正数且数值小于k1的集合长度就不会有重复值,如果是负数,就有重复值;
如果正数且集合长度超过set的集合长度,那只会给到集合的数量(因为不会重复),如果是负数,就会补齐输入的长度,可以有重复值)
应用场景:
抽奖另外还可以使用SPOP来抽奖,一次抽取1个
spop k1(一次抽取1个)
场景:交并叉集
sadd k1 a b c d(如果是用户的好友列表,如果是商品)
sadd k2 c d e f
sunion k1 k2(k1和k2的并集)sinter k1 k2(k1 k2的交集),共同的好友,那就是共同的商品sdiff k1 k2(k1在前,就是左叉集)面向谁的可以推荐的好友,推荐的商品
sdiff k2 k1(k2在前,就是右叉集)

SortedSet(ZSet) 类型(有序集合)

特点:有序集合,多了一个维度(分值,score),还有个维度(rank)

zadd k1 3.2 apple 1.2 banana 4.3 orange(在Zset集合的k1里面添加单价为3.2元的苹果,1.2元的香蕉,4.3元的橘子)zrange k1 0 -1 withscores 查看带分值的k1集合数据,从小大的数据zrange k1 0 1 (取出从小到大的前两名)zrevrange k1 0 1(取出从大到小的前两名)
应用场景:
分页排行榜,top n 的排行榜SortedSet的底层实现;ziplist,skiplist(如果元素特别多或者元素长度大的时候,会从ziplist切换成skiplist)ziplist(元素个数小于等于128或者元素的字节小于等于64byte),超过就切换成skiplistskiplist:跳跃表

Redis的5大Value的使用场景相关推荐

  1. Redis 的 8 大应用场景

    转载自  Redis 的 8 大应用场景 之前讲过Redis的介绍,及使用Redis带来的优势,这章整理了一下Redis的应用场景,也是非常重要的,学不学得好,能正常落地是关键. 下面一一来分析下Re ...

  2. Redis的十大常见应用场景

    一.缓存 作为Key-Value形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存.目前这几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据 ...

  3. Redis 的 4 大法宝,2018 必学中间件

    转载自 Redis 的 4 大法宝,2018 必学中间件! Redis是什么? 全称:REmote DIctionary Server Redis是一种key-value形式的NoSQL内存数据库,由 ...

  4. 面试精讲之面试考点及大厂真题 - 分布式专栏 11 Redis热点key大Value解决方案

    11 Redis热点key大Value解决方案 时间像海绵里的水,只要你愿意挤,总还是有的. --鲁迅 引言 上期分析了<Redis 雪崩,穿透,击穿三连问>,看了我的分析后回答面试官肯定 ...

  5. 华为云GaussDB(for Redis)揭秘:谁说Redis不能存大key

    一.社区版Redis的大key痛点 GaussDB(for Redis)专家小强最近有点忙,因为很多客户经理都来找他咨询社区版Redis的大key问题,且一个个都求知欲爆表(这里我们隐去敏感信息,仅保 ...

  6. 【Redis】五种数据类型及其使用场景

    Redis 数据类型 五种redis的类型与java的数据类型的类比 string --> String hash --> Hashmap list --> LinkList set ...

  7. MongoDB、Hbase、Redis等NoSQL优劣势、应用场景

    MongoDB.Hbase.Redis等NoSQL优劣势.应用场景 NoSQL数据库在整个数据库领域的江湖地位已经不言而喻.在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数 ...

  8. Redis [1] 简介、数据结构、应用场景

    文章目录 Redis [1] 简介.数据结构.应用场景 简介:**Nosql**介绍和**Reidis**介绍 什么是Redis 什么是缓存 面:为什么要用缓存 面:缓存会带来哪些问题? 热点key的 ...

  9. Redis在实际开发中的运用场景

    1.什么是Redis? Redis是一款基于内存的键-值型NoSQL数据库.NoSQL - 非关系型数据库 特点:可以进行快速的数据读写,官方数据 11W/s 读 8W/s 写. redis读写很快是 ...

最新文章

  1. ViewPager Indicator的使用方法
  2. 【采用】人工智能如何帮助银行反欺诈:银行智能欺诈风险预测模型研究
  3. 优学院java架构52破解_[单选] 肢体根据需要采用气囊止血带上肢压力至()
  4. [SDOI2014]旅行
  5. 基于springboot+vue的前后端分离商城系统
  6. 前端学习(1801):前端调试之清除浮动练习3
  7. Java技术回顾之JNDI--JNDI API
  8. 企业实战05:Oracle数据库_操作表中数据
  9. 使用Linux curl命令获取本机公网IP地址
  10. C语言Float的存储大小
  11. bzoj2429: [HAOI2006]聪明的猴子(最小生成树)
  12. 美团买菜助手来了,自动点击,助你买菜
  13. 杜佑夸高颎,NB人夸NB人
  14. 硬件电路之高压爬电距离
  15. 8除以2表示什么意思_8除以2等于4表示什么
  16. 嵌入式linux矩阵键盘,基于嵌入式Linux的矩阵键盘驱动程序开发
  17. 专业函数绘图软件Origin 7.5中文版
  18. 前端开发推荐的火狐插件扩展
  19. AIZOO开源人脸口罩检测
  20. java epson指令集_EPSON机械手 SPEL+语言指令集

热门文章

  1. 考研数学三考摆线吗_考研数学草稿纸发几张?可以多打几张准考证当草稿纸用吗?...
  2. 在组织中管理 Windows Hello 企业版
  3. 混合云存储阵列 > 产品简介 > 应用场景 > 双活容灾
  4. 等级保护2.0常见问题集
  5. Docker学习总结(28)——Docker 容器健康检查机制
  6. java nio oio_Java NIO框架Netty教程(十四) Netty中OIO模型(对比NIO)
  7. Centos0S7手动安装OpenStack Pike版--(Evironment)
  8. WPF学习(3) – WPF控件
  9. 微软云计算介绍与实践(实践之三十五)
  10. SCOM2012功能测试(18)—对象发现(替代)