这是我参与「第三届青训营 -后端场」笔记创作活动的第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:删除一个指定的keyEXISTS:判断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知识点大致是这些了,后续内容还会添加。
谢谢观看!!!