前提:安装redis6.0.8
Redis官网:https://redis.io/
Redis中文网:http://www.redis.cn/

redis基本类型:

  1. string
  2. list
  3. set
  4. zset(sorted set)
  5. hash

注意1:命令不区分大小写,但是key是区分大小写的。

127.0.0.1:6379> set K1 V1
OK
127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> get K1
"V1"
127.0.0.1:6379> get k1
"v2"
127.0.0.1:6379>

K1和k1的值是不同的。

注意2:help @+类型名词,查询命令。例如help @list

127.0.0.1:6379> help @listBLPOP key [key ...] timeoutsummary: Remove and get the first element in a list, or block until one is availablesince: 2.0.0BRPOP key [key ...] timeoutsummary: Remove and get the last element in a list, or block until one is availablesince: 2.0.0BRPOPLPUSH source destination timeoutsummary: Pop a value from a list, push it to another list and return it; or block until one is availablesince: 2.2.0LINDEX key indexsummary: Get an element from a list by its indexsince: 1.0.0LINSERT key BEFORE|AFTER pivot valuesummary: Insert an element before or after another element in a listsince: 2.2.0LLEN keysummary: Get the length of a listsince: 1.0.0LPOP keysummary: Remove and get the first element in a listsince: 1.0.0

1.string类型使用场景?

常规用法:
SET key value
GET key

127.0.0.1:6379> set k1 ct1
OK
127.0.0.1:6379> set k2 ct2
OK
127.0.0.1:6379> get k1
"ct1"

同时设置/获取多个键值

MSET key value [key value…]
MGET key [key…]

127.0.0.1:6379> mset k3 ct3 k4 ct4
OK
127.0.0.1:6379> mget k3 k4
1) "ct3"
2) "ct4"

数值增减
1.递增数字: INCR key(可以不用预先设置key的数值。如果预先设置key但值不是数字,则会报错)

127.0.0.1:6379> incr d1
(integer) 1
127.0.0.1:6379> incr d1
(integer) 2
127.0.0.1:6379> incr d1
(integer) 3
127.0.0.1:6379> incr d1
(integer) 4
127.0.0.1:6379>

增加指定的整数: INCRBY key increment

127.0.0.1:6379> incrby d1 2
(integer) 6
127.0.0.1:6379> incrby d1 2
(integer) 8

递减数值: DECR key

127.0.0.1:6379> decr d1
(integer) 7
127.0.0.1:6379> decr d1
(integer) 6
127.0.0.1:6379> decr d1
(integer) 5

减少指定的整数: DECRBY key decrement

127.0.0.1:6379> decrby d1 2
(integer) 3
127.0.0.1:6379> decrby d1 2
(integer) 1

获取字符串长度:STRLEN key

127.0.0.1:6379> strlen d1
(integer) 1

分布式锁

SETNX key value
SET key value [EX seconds] [PX milliseconds] [NX|XX]
EX:key在多少秒之后过期
PX:key在多少毫秒之后过期
NX:当key不存在的时候,才创建key,效果等同于setnx
XX:当key存在的时候,覆盖key

127.0.0.1:6379> set k1 v1 EX 20
OK
127.0.0.1:6379> ttl k1
(integer) 17
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> ttl k1
(integer) 11
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> ttl k1
(integer) 6
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> ttl k1
(integer) -2

应用场景
假如电商网站,某种商品,喜欢这个商品的人就点一下赞,不喜欢的就踩一下,分别记录喜欢和不喜欢的人数。
还有假如发布博客的点赞数,收藏的文章数据,商品编号,订单号的生成等等。
我们都可以这么写

127.0.0.1:6379> incr items:10
(integer) 1
127.0.0.1:6379> incr items:10
(integer) 2
127.0.0.1:6379> incr items:10
(integer) 3
127.0.0.1:6379> incr items:10
(integer) 4
127.0.0.1:6379> get items:10
"4"

2.hash类型使用场景?

Redis的Hash类型相当于Java中Map<String, Map<key, value>>

一次设置一个字段值 HSET key field value

127.0.0.1:6379> hset user id 110
(integer) 1
127.0.0.1:6379> hset user name ct
(integer) 1

一次获取一个字段值 HGET key field

127.0.0.1:6379> hget user id
"110"
127.0.0.1:6379> hget user name
"ct"
127.0.0.1:6379>

一次设置多个字段值 HMSET key field value [field value …]

127.0.0.1:6379> hmset user age 18 sex man
OK

一次获取多个字段值 HMGET key field [field …]

127.0.0.1:6379> hmget user age sex
1) "18"
2) "man"

获取所有字段值 HGETALL key

127.0.0.1:6379> hgetall user
1) "id"
2) "110"
3) "name"
4) "ct"
5) "age"
6) "18"
7) "sex"
8) "man"

获取某个key内的全部数量 HLEN

127.0.0.1:6379> hlen user
(integer) 4

删除一个key HDEL

127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
1) "id"
2) "110"
3) "name"
4) "ct"
5) "sex"
6) "man"

应用场景:
电商项目里的购物车,订餐等

购物车编号:shopcar:01

新增商品:shop001

127.0.0.1:6379> hset shopcar:01 shop001 1
(integer) 1

新增商品 :shop002

127.0.0.1:6379> hset shopcar:01 shop002 1
(integer) 1

增加商品数量:shop001

127.0.0.1:6379> hincrby shopcar:01 shop001 1
(integer) 2

商品总数

127.0.0.1:6379> hlen shopcar:01
(integer) 2

查看购物车信息

127.0.0.1:6379> hgetall shopcar:01
1) "shop001"
2) "2"
3) "shop002"
4) "1"

3.list类型使用场景

向列表左边添加元素 LPUSH key value [value …]

127.0.0.1:6379> lpush list1 1 2 2 3 3 4 5
(integer) 7
127.0.0.1:6379> lrange list1 0 -1 //全部遍历
1) "5"
2) "4"
3) "3"
4) "3"
5) "2"
6) "2"
7) "1"

有序有重复

向列表右边添加元素 RPUSH key value [value …]

127.0.0.1:6379> rpush list1 6
(integer) 8
127.0.0.1:6379> rpush list1 7
(integer) 9
127.0.0.1:6379> rpush list1 8
(integer) 10
127.0.0.1:6379> lrange list1 0 -11) "5"2) "4"3) "3"4) "3"5) "2"6) "2"7) "1"8) "6"9) "7"
10) "8"

查看列表 LRANGE key start stop

lrange list1 0 -1 //全部遍历

获取列表中元素的个数 LLEN key

127.0.0.1:6379> llen list1
(integer) 10

应用场景:
微信文章订阅公众号:一个人可以订阅多个公众号,假如用户【likeauthor:L001 】分别订阅了【11】和【22】作者的文章,就把【11】和【22】放到用户【likeauthor:L001 】list里,然后展示给用户。

127.0.0.1:6379> lpush likeauthor:L001 11 22
(integer) 2
127.0.0.1:6379> lrange likeauthor:L001 0 -1
1) "22"
2) "11"

4.set类型使用场景

无序无重复

添加元素 SADD key member [member …]

127.0.0.1:6379> sadd set1 2 3 3 5 4 1 5
(integer) 5
127.0.0.1:6379> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

删除元素 SREM key member [member …]

127.0.0.1:6379> srem set1 5
(integer) 1
127.0.0.1:6379> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"

获取集合中的所有元素 SMEMBERS key

127.0.0.1:6379> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"

判断元素是否在集合中 SISMEMBER key member

127.0.0.1:6379> sismember set1 2
(integer) 1

获取集合中的元素个数 SCARD key

127.0.0.1:6379> scard set1
(integer) 4

从集合中随机弹出一个元素,元素不删除 SRANDMEMBER key [数字]

127.0.0.1:6379> srandmember set1//不写默认是1个,写几个就是几个
"4"
127.0.0.1:6379> srandmember set1
"2"
127.0.0.1:6379> scard set1
(integer) 4

从集合中随机弹出一个元素,出一个删一个 SPOP key[数字]

127.0.0.1:6379> spop set1 //不写默认是1个,写几个就是几个
"1"
127.0.0.1:6379> scard set1
(integer) 3

集合运算

集合的差集运算A - B
属于A但不属于B的元素构成的集合
SDIFF key [key …]

127.0.0.1:6379> sadd set1 1 2 3
(integer) 3
127.0.0.1:6379> sadd set2 2 3 4
(integer) 3
127.0.0.1:6379> sdiff set1 set2
1) "1"

集合的交集运算A ∩ B
属于A同时也属于B的共同拥有的元素构成的集合
SINTER key [key …]

127.0.0.1:6379> sinter set1 set2
1) "2"
2) "3"

集合的并集运算A U B
属于A或者属于B的元素合并后的集合
SUNION key [key …]

127.0.0.1:6379> sunion set1 set2
1) "1"
2) "2"
3) "3"
4) "4"

应用场景1:
微信小程序抽奖,发布某个抽奖活动,点击【立即参与】,就会把当前用户的ID存到set里,然后用spop命令

10个人,抽3个二等奖,1个一等奖

127.0.0.1:6379> sadd set3 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:6379> spop set3 3
1) "5"
2) "7"
3) "10"
127.0.0.1:6379> spop set3 1
1) "1"
127.0.0.1:6379> smembers set3
1) "2"
2) "3"
3) "4"
4) "6"
5) "8"
6) "9"

应用场景2:
微信朋友圈点赞,发布一条朋友圈,好久点赞了,就把好友id放到set里

127.0.0.1:6379> sadd message:01 user1 user2
(integer) 2
127.0.0.1:6379> smembers message:01
1) "user2"
2) "user1"

取消点赞

127.0.0.1:6379> srem message:01 user1
(integer) 1
127.0.0.1:6379> smembers message:01
1) "user2"

展现点赞过的用户

127.0.0.1:6379> smembers message:01
1) "user2"

点赞用户统计,就是常见红色数字

127.0.0.1:6379> scard message:01
(integer) 1

判断某个朋友是否对你点赞过

127.0.0.1:6379> sismember message:01 user3
(integer) 0

应用场景3:
微博好友共同关注的人

127.0.0.1:6379> sadd s1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd s2 3 4 5 6 7
(integer) 5
127.0.0.1:6379> sinter s1 s2
1) "3"
2) "4"
3) "5"

我关注的人也关注它(大家爱好相同)

127.0.0.1:6379> sadd s1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd s2 3 4 5 6 7
(integer) 5
127.0.0.1:6379> sismember s1 3
(integer) 1
127.0.0.1:6379> sismember s2 3
(integer) 1

QQ内推,可能认识的人

127.0.0.1:6379> sadd s1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd s2 3 4 5 6 7
(integer) 5
127.0.0.1:6379> sdiff s1 s2
1) "1"
2) "2"
127.0.0.1:6379> sdiff s2 s1
1) "6"
2) "7"

5.zset类型使用场景

向有序集合中加入一个元素和该元素的分数

添加元素 ZADD key score member [score member …]

127.0.0.1:6379> zadd zset1 100 mov1 80 mov2
(integer) 2

按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素 ZRANGE key start stop [WITHSCORES]

127.0.0.1:6379> zrange zset1 0 -1
1) "mov2"
2) "mov1"

获取元素的分数 ZSCORE key member

127.0.0.1:6379> zscore zset1 mov1
"100"

删除元素 ZREM key member [member …]

127.0.0.1:6379> zrem zset1 mov1
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1
1) "mov2"

获取指定分数范围的元素 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

127.0.0.1:6379> zrange zset1 0 -1
1) "mov2"
127.0.0.1:6379> zadd zset1 70 mov3
(integer) 1
127.0.0.1:6379> zadd zset1 60 mov4
(integer) 1
127.0.0.1:6379> zadd zset1 50 mov5
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE zset1 60 70
1) "mov4"
2) "mov3"

增加某个元素的分数 ZINCRBY key increment member

127.0.0.1:6379> ZINCRBY zset1 5 mov5
"55"

获取集合中元素的数量 ZCARD key

127.0.0.1:6379> zcard zset1
(integer) 4

获得指定分数范围内的元素个数 ZCOUNT key min max

127.0.0.1:6379> zcount zset1 55 70
(integer) 3

按照排名范围删除元素 ZREMRANGEBYRANK key start stop

127.0.0.1:6379> ZREMRANGEBYRANK zset1 3 4
(integer) 1
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "mov5"
2) "mov4"
3) "mov3"

获取元素的排名

从小到大 ZRANK key member

127.0.0.1:6379> ZRANK zset1 mov3//索引从0开始的
(integer) 2

从大到小 ZREVRANK key member

127.0.0.1:6379> ZREVRANK zset1 mov3//索引从0开始的
(integer) 0

应用场景:
1.定义商品销售排行榜,key为goods,分数为销售量
商品编号1001销量9,商品编号1002销售15

127.0.0.1:6379> zadd goods 9 1001 15 1002
(integer) 2

客户买了2件1001,销量+2

127.0.0.1:6379> zincrby goods 2 1001
"11"

求商品销售量前10名

127.0.0.1:6379> zrange goods 0 9 withscores
1) "1001"
2) "11"
3) "1002"
4) "15"

2.抖音热搜
点击视频

127.0.0.1:6379> ZINCRBY hotvcr 1 mov1
"1"
127.0.0.1:6379> ZINCRBY hotvcr 1 mov2
"1"
127.0.0.1:6379> ZINCRBY hotvcr 5 mov1
"6"
127.0.0.1:6379> ZINCRBY hotvcr 11 mov2
"12"

展示当日排行榜前10条

127.0.0.1:6379> ZREVRANGE hotvcr 0 9 withscores
1) "mov2"
2) "12"
3) "mov1"
4) "6"

Redis面试之传统五大数据类型的落地应用详解相关推荐

  1. Redis数据库及五种数据类型的常用命令详解

    一.理论部分 1.什么是redis Redis(Remote Dictionary Server ),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value结 ...

  2. MySQL数据类型以及基本使用详解

    MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端 ...

  3. java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)

    Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...

  4. DBus glib 各数据类型接收与发送详解—C语言(3)

    DBus glib 各数据类型接收与发送详解-C语言(3) 动机 前置知识 正文 Python 测试服务 使用 C 实现复杂数据类型的传递 DICT_DICT ObjectPath_Dict_Stru ...

  5. java 封装表单数据类型_Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).in ...

  6. 【面试篇】ConcurrentHashMap1.7和1.8详解对比

    ConcurrentHashMap1.7和1.8详解对比 [面试篇]数据结构-哈希表 [面试篇]HashMap常见面试题目 [面试篇]HashMap1.7和HashMap1.8的详细区别对比 [面试篇 ...

  7. 上手Redis系列(六):超全Geospatial特殊类型详解(地理位置)

    学习Redis之前,我还是觉得我务必跟你说一声,也是在我文章之中说的很多的一句话,我想也会适用于学习Redis,那就是在接触文章里的Reids命令时,不用试图去记这些命令 ,用到时去看API帮助文档即 ...

  8. python numpy dtype object_关于Numpy数据类型对象(dtype)使用详解

    常用方法 #记住引入numpy时要是用别名np,则所有的numpy字样都要替换 #查询数值类型 >>>type(float) dtype('float64') # 查询字符代码 &g ...

  9. 面试官都在问 | Linux命令mpstat详解

    面试官都在问 | Linux命令mpstat详解 1. mpstat的基本用法 mpstat的全称为Multiprocessor Statistics,是一款常用的多核CPU性能分析工具,用来实时查询 ...

最新文章

  1. pandas使用replace函数替换dataframe中的值:replace函数对dataframe中的多个值进行替换、即一次性同时对多个值进行替换操作
  2. Fiddler抓包使用教程-过滤
  3. Diango 模板层
  4. php5和php7的bccomp计算精度区别
  5. 全国计算机一级考试介绍难不难,全国计算机一级考试内容 计算机一级考试难吗...
  6. codeforces 703B
  7. cobaltstrike生成一个原生c,然后利用xor加密解密执行
  8. [css] margin和padding使用的场景有哪些?
  9. 带你吃透分布式的精髓!
  10. 【面试经验】关于BERT,面试官们都怎么问
  11. bzoj4009: [HNOI2015]接水果
  12. SLAM--BA优化
  13. matlab gui系统设计,matlabgui系统设计
  14. 原生Android用不了電信4g,给初中生准备的手机,在深圳地区用中国电信4G体验多亲Qin2 AI助手,开箱和使用体验...
  15. 计算机内存不足提示栻框,【计算机】CIMS概论6.ppt
  16. 【教程】用微信创建生日提醒
  17. 国家开放大学专科计算机应用实训项目,国家开放大学电大专科《微机系统与维护》网络课实训1实训3作业及答案.docx...
  18. linux中exec的用法
  19. 多多成稿作品网www.no1paper.cn测评
  20. 本地化翻译软件测试,本地化测试 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

热门文章

  1. 夏门大学的计算机专业排第几,厦门大学最好重点的专业在全国排名具体情况
  2. jenkins 忘记用户名和密码
  3. php 租房子(练习题)
  4. NOIP2013/day1/1/转圈游戏
  5. URL Routing
  6. 关于gcc -o 的使用问题
  7. Algorithm: 匈牙利算法
  8. ASP.NET Web开发框架之七 开发流程与模式
  9. java 蓝桥杯 算法训练 区间k大数查询(题解)
  10. jstack 线程状态分析_面试官:说说你是怎么用JDK监控和故障处理工具的吧?例如jstack...