基本介绍
官网命令大全网址:doc.redisfans.com/
redis一共有9大类型如下:
- String(字符类型)
- Hash(散列类型)
- List(列表类型)
- Set(集合类型)
- SortedSet(有序集合类型,简称zset)
- Bitmap(位图)
- HyperLogLog(统计)
- GEO(地理)
- Stream:简单了解即可
注意:Redis命令不区分大小写,而key是区分大小写的.
String
最常用两个命令:
- set key value
- get key
同时设置/获取多个键值
- MSET key value [key value ....]
- MGET key [key ....]
递增数字:INCR key
增加指定的整数:INCRBY key increment
递减数值:DECR key
减少指定的整数:DECRBY key decrement
获取字符串长度:STRLEN key
分布式锁实现如下:
- setnx key value
- set key value [EX seconds] [PX milliseconds] [NX|XX]
应用场景
1.比如抖音无限点赞某个视频或者商品,点一下加一次
2.是否喜欢的文章
阅读数:只要点击了rest地址,直接可以使用incr key 命令增加一个数字1,完成记录数字。
hash
hash结构相当于Map<String,Map<Object,Object>>。 常用命令如下:
- 一次设置一个字段值:HSET key field value
- 一次获取一个字段值:HGET key field
- 一次设置多个字段值:HMSET key field value [field value ...]
- 一次获取多个字段值:HMGET key field [field ....]
- 获取所有字段值:hgetall key
- 获取某个key内的全部数量:hlen
- 删除一个key:hdel
应用场景
JD购物车早期 设计目前不再采用,当前小中厂可用。
新增商品 → hset shopcar:uid1024 334488 1
新增商品 → hset shopcar:uid1024 334477 1
增加商品数量 → hincrby shopcar:uid1024 334477 1
商品总数 → hlen shopcar:uid1024
全部选择 → hgetall shopcar:uid1024
list
list类型一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。
常用命令如下:
- 向列表左边添加元素:LPUSH key value [value ...]
- 向列表右边添加元素:RPUSH key value [value ....]
- 查看列表:LRANGE key start stop
- 获取列表中元素的个数:LLEN key
应用场景
微信公众号订阅的消息 1 大V作者李永乐老师和CSDN发布了文章分别是 11 和 22
2 阳哥关注了他们两个,只要他们发布了新文章,就会安装进我的List lpush likearticle:阳哥id 11 22
3 查看阳哥自己的号订阅的全部文章,类似分页,下面0~10就是一次显示10条 lrange likearticle:阳哥id 0 9
商品评论列表
- 需求1:用户针对某一商品发布评论,一个商品会被不同的用户进行评论,保存商品评论时,要按时间顺序排序
- 需要2:用户在前端页面查询该商品的评论,需要按照时间顺序降序排序
使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为1001的商品评论key【items:comment:1001】
lpush items:comment:1001 {"id":1001,"name":"huawei","date":1600484283054,"content":"lasjfdljsa;fdlkajsd;lfjsa;ljf;lasjf;lasjfdlsad"}
set
常用命令如下:
- 添加元素:SADD key member [member ...]
- 删除元素:SREM key member [member ...]
- 遍历集合中的所有元素:SMEMBERS key
- 判断元素是否在集合中:SISMEMBER key member
- 获取集合中的元素总数:SCARD key
- 从集合中随机弹出一个元素,元素不删除:SRANDMEMBER key [数字]
- 从集合中随机弹出一个元素,出一个删一个:SPOP key [数字]
集合运算如下:
- 集合的差集运算 A-B:属于A但不属于B的元素构成的集合,SDIFF key [key ...]
- 集合的交集运算 A∩B:属于A同时也属于B的共同拥有的元素构成的集合,SINTER key [key ...]
- 集合的并集运算 A ∪ B:属于A或者属于B的元素合并后的集合,SUNION key [key ...]
应用场景
1.微信抽奖小程序
2.微信朋友圈点赞
3.微博好友关注社交关系
共同关注的人,我去到局座张召忠的微博,马上获得我和局座共同关注的人
我关注的人也关注他(大家爱好相同),我关注了华为余承东,余承东也关注了局座召忠,我和余总有共同的爱好。
3.QQ内推可能认识的人
Zset
zset类型:向有序集合中加入一个元素和该元素的分数。
常用命令如下:
- 添加元素:ZADD key score member [score member ...]
- 按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素:ZRANGE key start stop [WITHSCORES]
- 获取元素的分数:ZSCORE key member
- 删除元素:ZREM key member [member ...]
- 获取指定分数范围的元素:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
- 增加某个元素的分数:ZINCRBY key increment member
- 获取集合中元素的数量:ZCARD key
- 获得指定分数范围内的元素个数:ZCOUNT key min max
- 按照排名范围删除元素:ZREMRANGEBYRANK key start stop
- 获取元素的排名,从小到大:ZRANK key member,从大到小:ZREVRANK key member
应用场景
1.根据商品销售对商品进行排序显示
思路:定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。
2.抖音热搜
案例实战
微信文章阅读量统计:
ArticleController代码演示如下:
package com.atguigu.redis.controller;
import com.atguigu.redis.service.ArticleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @auther zzyy
* @create 2021-05-01 19:55
*/
@RestController
@Slf4j
@Api(description = "喜欢的文章接口")
public class ArticleController
{
@Resource
private ArticleService articleService;
@ApiOperation("喜欢的文章,点一次加一个喜欢")
@RequestMapping(value ="/view/{articleId}", method = RequestMethod.POST)
public void likeArticle(@PathVariable(name="articleId") String articleId)
{
articleService.likeArticle(articleId);
}
}
ArticleService代码演示如下:
package com.atguigu.redis.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @auther zzyy
* @create 2021-05-01 19:50
*/
@Service
@Slf4j
public class ArticleService
{
public static final String ARTICLE = "article:";
@Resource
private StringRedisTemplate stringRedisTemplate;
public void likeArticle(String articleId)
{
String key = ARTICLE+articleId;
Long likeNumber = stringRedisTemplate.opsForValue().increment(key);
log.info("文章编号:{},喜欢数:{}",key,likeNumber);
}
}
注意:以上案例中小厂可以用,QPS特别高的的大厂不可以用