💌 这是我参与「第五届青训营」伴学笔记创作活动的第 14 天。
🧡 Redis
Redis优势
- 性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s ,单机能够达到15w qps,通常适合做缓存。
- 丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性:Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis 与其他 key-value 存储有什么不同
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Go 操作 Redis
💌 开始学习在 Go 语言中依赖github.com/garyburd/redigo/redis操作 Redis。在 Redis 文件中写好 NewRedis 函数,使用 Redis.NewRedis(HOST, POST, DB) 连接到对应数据库,使用 Set、Get 方法,打印结果成功。
func (r *Redis) getConnect() error {
conn, err := redis.Dial("tcp", r.Host+":"+r.Port)
if err != nil {
return err
}
r.Server = conn
_, err = conn.Do("select", r.DB)
if err != nil {
return err
}
return nil
}
func NewRedis(Host, Port, DB string) *Redis {
r := new(Redis)
r.Host = Host
r.Port = Port
r.DB = DB
err := r.getConnect()
if err != nil {
return nil
}
return r
}
package service
import (
"common/Redis"
"fmt"
"testing"
)
var rd *Redis.Redis
func TestRedis(t *testing.T) {
rd = Redis.NewRedis(HOST, POST, DB)
if rd == nil {
fmt.Println("ping err")
return
}
fmt.Println(rd)
_, err := rd.Set("6", "4")
if err != nil {
fmt.Println(err)
return
}
r, err := rd.Get("6")
if err != nil {
fmt.Println("get 4 failed,", err)
return
}
fmt.Println(r)
}
💌 可以用 Redis 可视化工具更直观地查看数据库信息:Another Redis DeskTop Manager 作为一款基于nodejs 开发的免费的 Redis 可视化管理工具,可以运行在 Windows、Linux、Mac 平台,而且是开源免费应用,很推荐使用。官方地址: gitee.com/qishibo/Ano… github.com/qishibo/Ano…
- 查看防火墙状态:firewall-cmd --state
- 停止firewall:systemctl stop firewalld.service
- 禁止firewall开机启动:systemctl disable firewalld.service
- 如果是本地连接的话,直接使用 127.0.0.1 进行连接即可