这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
Redis介绍:
- Redis是NoSql系统之一
- 一个开源的,使用ANSI C语言编写的key-value存储系统(区别于myslq的二维表格形式存储)
- 与memcache类似,但很大程度补偿了它的不足,Redis数据都是缓存在计算机内存中,不同的是,memcache只能将数据缓存到内存中,无法自动定期写入硬盘。
Redis应用场景:
取最新的N个数据:
最新的文章,最新的5000条评论ID放在Redis的List集合中,并将超出集合部分从数据库获取
排行榜应用,取TOP N操作:
这个需求与上面的不同,前面是以时间为权重,这个是以某个条件为权重,比如按顶的次数排序,可以使用Redis的sorted set,将排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。
需要设置精准过期时间的应用:
比如可以把上面说到的sorted set的score值设置成过期的时间戳,那么就可以简单的通过过期时间排序,定时清楚过期的数据了,不仅仅是清楚Redis中的过期数据,你完全可以把Redis里的过期时间当成是数据库中的索引,用Redis来找出哪些数据需要过期删除,然后再精准地从数据库中删除相应的记录。
计数器应用:
Redis命令是原子性的,可以构建计数器系统
Uniq操作,获取某段时间所有数据排重值:
这个使用Redis的set数据结构,只需要不断地将数据中往set中,自动排重
实时系统:
通过上面set功能,可以知道终端用户是否进行了某个操作,可以找到其操作的集合并进行分析统计对比等。
缓存:
将数据放到内存中,性能好,数据结构多样化。
Redis特点
- 高效性
- 原子性
- 支持多种数据结构
- String a->b 配置
- List a->list 消息队列
- Hash a->map 购物车
- Set a->set 去重
- Zset a->sorted set 排行榜
- 稳定性:持久化,主从复制
- 其他特性:支持过期时间,支持事务,消息订阅。
Redis快速入门:
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})
}
func main() {
ctx := context.Background()
err := rdb.Set(ctx, "key", "value", 0).Err()
if err != nil {
panic(err)
}
val, err := rdb.Get(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
}