Redis框架学习| 青训营笔记

73 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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特点

  • 高效性
  • 原子性
  • 支持多种数据结构
  1. String a->b 配置
  2. List a->list 消息队列
  3. Hash a->map 购物车
  4. Set a->set 去重
  5. 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)
}