Redis基础应用
一、redis能做什么?
- 记录帖子点赞数、评论数、点击数
- 记录用户的帖子ID列表,用户快速展示
- 记录帖子的标题、摘要、作者和封面信息,用于展示
- 记录帖子的点击用户ID、评论ID,用户显示和去重
- 缓存几千里热帖内容,减少数据库压力
- 记录帖子相关文章ID,根据内容推荐相关帖子
- 如果帖子ID是整数自增的,可以用来分配帖子ID
- 收藏集和帖子之间的关系
- 记录热榜帖子ID、总榜、分类热榜
- 缓存用户历史行为,过滤恶意行为
二、Redis有哪些数据结构
- String 字符串
- list 列表
- hash 字典
- set 集合
- zset 有序集合
1. String 字符串
- 能够用于存储用户信息
- redis的字符串是动态字符串,能够修改,内部结构类似于arraylist,采用预分配冗余空间的方式是减少内存的频繁分配
- 字符串小于1M,扩容都是现有容量翻倍扩量,如果字符串大于1M,扩容只递增1M
- 字符串最大长度512M
set key value
get key
mget key1 key2 key3
mset key1 value1 key2 value2 key3 value3
expire key1 5 #key1 5秒后过期
setex key1 5 sssss # 相当于set+expire 过期
setnx key1 value1 #如果key1不存在就设置value1
value值是整数的话,可以执行自增
set key1 55
incr key1 #+1
incr key1 5 #60
incr key1 -5 #55
递增不饿能唱超过Long.MAX_VALUE
2.list 列表
-
相当于JAVA数据类型:LinkedList,链表结构不是数组结构,因而list数据类型删除和新增很快(O(1)),但是索引定位比较慢(O(n)),列表中的值都有向前向后指针,支持向前向后遍历
-
常用来做异步队列使用(队列,先进先出保证确保元素的访问顺序,栈,后进先出,与队列相反)
rpush key1 value1 value2 value3
llen key1 #队列
lpop key1 #队列
rpop key1 #栈
lindex keys 1 #链表get(index)
ltrim key1 start end
lrange key1 start end
- 底层使用quicklist实现类linkedlist的结构,在元素较少的情况,会使用连续的内存存储,结构是ziplist-压缩列表。数据较多的时候,才改成quicklist,使用链表和ziplist整合起来,将多个ziplist使用双向指针串联,既满足快速插入删除性能,又不会出现太大的空间冗余
3.Hash 字典
- 类似于HashMap,是无序字典,存储键值对,数组+链表的数据结构。redis只能存储字符串,并且rehash逻辑不同,采用渐进式rehash策略,追求高性能,避免阻塞服务。渐进式rehash会同时保留新旧两个hash的结构,读取数据会同时分发到新旧hash上,在后续的定时任务以及hash操作指令中,循序渐进地将旧的hash内容一点点迁移到新的hash结构中,才会使用新的hash取代旧的hash
- 可以用于存储用户信息,可以存储在一起,或者按照属性值存储,按属性读取
hget book key
hset book key value
hgetall book
hlen book
hset book key value1
hmset book key1 value2 key2 value3
#针对整形的value能够进行递增
hset book price1 20
hincrby book price1 5 #增加5元
4.set集合
- 类似于HashSet,内部键值对是无序唯一的,特殊的HashMap,值为NULL
- 可用于存储某活动中中奖的用户ID,因为hash的key自带去重功能
sadd key1 value1
sadd key1 value2 value3
smembers key1 #展示结果无序
sismember key1 value4 #类似于contains功能,用于判断值是否存在
scard key1 #类似于count
5.zset 有序列表
- 类似于SortedSet HashMap的结合,使用元素的score值,能够对列表进行排序,并且值是唯一的,内部采用跳跃表进行实现
- 可以用于存储粉丝列表,或者带权重类型排序,可以score对应时间或者贡献值
zadd book 10.0 "aaa"
zadd book 8.8 "bbb"
zrange book fromindex toindex #获取范围内的书籍,按照score排序输出
zrevrange book fromindex toindex #逆序获取范围内的书籍
zcard book #类似于count
zscore book "aaa" #获取aaa书籍的权重
zrank book "bbb" #获取"bbb"书籍的排名
zrankbyscore book -inf 9.0 withscores #获取负无穷~9.0区间内的书籍,附带分数
zem book "aaa" #删除
其他
- 所有的数据结构都可以设置过期时间
- 过期是针对对象的,是一个HASH对象对其,而不是某一个子key
- 一个字符串对象,如果已经设置了过期时间,期间又通过set对内容进行更新了,过期机制就会失效
三、分布式锁
Featured Tags
工具类
XML
JAVA
Java
Mybatis
反射
代理模式
日志
工厂方法模式
装饰器模式
结果集映射
Web
RESTful
WebAPI规范
SQL
Redis
Jira
SynapseRT
有限状态机 State Machine
statemachine
SpringBoot
IDEA
Tomcat
Vue
Docker
Springboot
Apache Ignite
项目发布与调试
白帽子讲web安全
黑名单
通用化
企业中台实践
MacOS
docker
minio
springboot
分布式存储
Postgres
数据备份
数据恢复
K8S
抖音小程序
开发实践
SpringCloud
PostgreSQL
Skywalking
Nacos
Kubernetes
Secret
ConfigMap
Git
GitOps
云原生
RocketMQ
ActiveMQ-Artemis
ClickHouse
Kamailio
SIP
sipp
Homer
heplify
heplify-server
HEP
OpenSIPS
sip
DeepSeek