goland相关Redis操作| 青训营笔记

132 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

NoSQL介绍

概念

NoSQL=Not only SQL(不仅仅时SQL),泛指非关系型数据库,传统的关系型数据库无法面对高并发的问题。

特点

  • 方便扩展(数据之间没有关系,方便扩展)

  • 大数据量高性能性。NoSQL的缓存是一种细粒度的缓存,性能较高

  • 数据类型多样性(不需要设计数据库(数据量小的))

  • 传统RDBMS和NoSQL的区别

    • 传统的RDBMS

      1.结构化组织

      2.SQL

      3.数据和关系都存在单独的表中

      4.操作,数据定义语言

      5.严格的一致性

      6.基础的事务

    • NoSQL

      1..不仅仅是数据

      2.没有固定的查询的语言

      3.键值对存储,列存储,文档存储,图形数据库(社交关系)

      4.最终一致性

      5.CAP定理和 BASE(不一定支持事务ACID)

      6.保证高性能、高可用、高扩展。

Redis介绍

简单概念

  • redis作为NoSql的一种,拥有NoSQL相关特点
  • redis支持数据的持久化,将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用
  • redis不仅仅支持key-value数据,还支持:string,list,set,hash等
  • redis支持数据备份,即master-slaver模式的数据备份

常见命令

通用指令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key,不建议在生产环境设备上使用
  • DEL:删除一个指定的key
  • EXISTS:判断key是否存在
  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
  • TTL:查看一个KEY的剩余有效期 (-1:代表永久有效)

还有其他几种数据结构操作命令参考Redis官网

go操作Redis

获取Redis连接

func GetRedisConnection() redis.Conn {
    c, err := redis.Dial("tcp", "localhost:6379")
    if err != nil {
        fmt.Println("conn redis failed,", err)
        return nil
    }
    fmt.Println("redis conn success")
​
    return c
}

Dial获取Redis连接:本地Redis使用6379端口

操作基础命令

  • Set命令
//获取redis连接
    conn := utils.GetRedisConnection()
    if conn == nil {
        fmt.Println("获取redis连接失败")
    }
​
    //将token存入用户信息存入redis中
    token := utils.RandString(32)
    userJson, err := json.Marshal(user)
    if err != nil {
        fmt.Println(err)
    }
//使用set命令
    conn.Do("set", constant.USER_FLAG+token, userJson)
  • Get命令
conn := utils.GetRedisConnection()
    userjson, err := redis.String(conn.Do("get", constant.USER_FLAG+token))
    if err != nil {
        fmt.Println(err)
    }
​
    var user common.User
    json.Unmarshal([]byte(userjson), &user)
    //redis中不存在用户信息,从数据库中查找
    if user.Username == "" {
        user = dao.GetInfos(userId)
    }

注:redis.string()方法get命令返回的数据转成字符串,还有类似的redis.int()方法

操作Set相关命令

在上述操作Redis基础命令上,我们进阶一下使用最常用的set数据结构命令

  • 判断用户是否是成员
//省略Redis连接
//redis中set判断是否存在
        result, err := redis.Int(conn.Do("SISMEMBER", constant.VIDEO_FLAG+string(videoId), user.UserId))
        //不存在,点赞操作
        if err != nil {
            fmt.Println(err)
        }

result==1时:表示是存在该成员变量

result==0时:表示是不存在该成员变量

  • 获取所有成员
conn.Do("SMEMBERS", constant.VIDEO_FLAG+string(videoId))

返回SET集合该key的所有成员

本次大项目涉及Redis知识点大致是这些了,后续内容还会添加。

谢谢观看!!!