Go-Redis
Redis支持的数据结构
Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查询的排序集合(sorted sets)、位图(bitmaps)、hyperloglogs、带半径查询和流的地理空间索引等数据结构(geospatial indexes)。
Redis应用场景
缓存系统,减轻主数据库(MySQL)的压力。
计数场景,比如微博、抖音中的关注数和粉丝数。
热门排行榜,需要排序的场景特别适合使用ZSET。
利用LIST可以实现队列的功能。
Redis与Memcached比较
Memcached中的值只支持简单的字符串,Reids支持更丰富的5中数据结构类型。
Redis的性能比Memcached好很多
Redis支持RDB持久化和AOF持久化。
Redis支持master/slave模式。
操作步骤
下载依赖
go get github.com/garyburd/redigo/redis
创建连接
conn, err := redis.Dial("tcp",
"127.0.0.1:6379",
redis.DialDatabase(1) // dialOption参数可以配置选择数据库、连接密码、心跳检测等等
redis.DialPassword("xxxx"))
if err != nil {
fmt.Println("Connect to redis failed ,cause by >>>", err)
return
}
defer conn.Close()
插入值
//写入值
_, err = conn.Do("SET", "test-Key", "test-Value")
if err != nil {
fmt.Println("redis set value failed >>>", err)
}
检验key值是否存在
//检查是否存在key值
exists, err := redis.Bool(conn.Do("EXISTS", "test-Key"))
if err != nil {
fmt.Println("illegal exception")
}
fmt.Printf("exists or not: %v \n", exists)
获取值
//read value
v, err := redis.String(conn.Do("GET", "test-Key"))
if err != nil {
fmt.Println("redis get value failed >>>", err)
}
fmt.Println("get value: ", v)
给定一个kv的过期时间
//EX,5秒
_, err = conn.Do("SET", "test-Key", "test-Value", "EX", "5")
if err != nil {
fmt.Println("redis set value failed >>>", err)
}
删除key
//del kv
_, err = conn.Do("DEL", "test-Key")
if err != nil {
fmt.Println("redis delelte value failed >>>", err)
}