当前位置:网站首页>Go: go - redis based operation
Go: go - redis based operation
2022-07-30 08:03:00 【pedestrians have】
The vast earth was shattered with a single sword,Where is the prosperous song and song fall
具体代码在:https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go/tree/master/go_redis
1、下载go-redis库
go get github.com/go-redis/redis
2、 初始化redis
import (
"fmt"
"github.com/go-redis/redis"
)
// 声明一个全局的redisDb变量
var redisDb *redis.Client
func initRedisClient() (err error) {
redisDb = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "",
DB: 0,
})
_, err = redisDb.Ping().Result()
if err != nil {
return err
}
return nil
}
2.1 、 链接redis
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
}
3.0、基础操作
3.1 、get/set
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
var key string = "test-key"
var keyValue string = "test"
err = redisDb.Set(key, keyValue, 0).Err()
if err != nil {
panic(err)
}
var value string
value, err = redisDb.Get("test-key").Result()
if err != nil {
panic(err)
}
fmt.Println("key:", value)
}
3.2 、getSet / setNx
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
var key string = "test-key"
var keyValue string = "test"
var oldValue string
oldValue, err = redisDb.GetSet(key, "test").Result()
if err != nil {
panic(err)
}
fmt.Println(oldValue)
//如果key不存在,则设置这个key的值,并设置key的失效时间.如果key存在,则设置不生效
err = redisDb.SetNX(key, "test", 0).Err()
if err != nil {
panic(err)
}
}
3.3 、MSet / MGet :批量设置
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
//批量设置多个key-value值
err = redisDb.MSet("key1", "value1", "key2", "value2").Err()
if err != nil {
panic(err)
}
// MGet函数可以传入任意个key,一次性返回多个值.
// 这里Result返回两个值,第一个值是一个数组,第二个值是错误信息
values, err := redisDb.MGet("key1", "key2", "key3").Result()
if err != nil {
panic(err)
}
fmt.Println(values)
}
3.4 、Incr/ Decr:自增/自减
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
//Incr()设置一个age测试自增、自减
err = redisDb.Set("number", "0", 0).Err()
if err != nil {
panic(err)
}
redisDb.Incr("number") // 自增
redisDb.IncrBy("number", 10) // 自增 +10
val, err = redisDb.Get("number").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
redisDb.Decr("number") // 自减
redisDb.DecrBy("number", 3) //-3 此时age的值是22
val, err = redisDb.Get("number").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
}
3.5 、GetRange/ Append / StrLen:字符串截取 /追加/长度
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
//GetRange() : key,start-从那个位置开始截取,endt-End from that position
val, err := redisDb.GetRange("test-key", 0, 4).Result()
if err != nil {
panic(err)
}
fmt.Println(val)
//会在key-value后面增加 '你好'
length, err := redisDb.Append("test-key", "你好").Result()
if err != nil {
panic(err)
}
fmt.Print("当前缓存key的长度", length)
var result string
result, err = redisDb.Get("test-key").Result()
fmt.Print(result)
//获取长度
num, err := redisDb.StrLen("test-key").Result()
if err != nil {
panic(err)
}
fmt.Printf("当前缓存key的长度为: %v\n", num)
//------------------ Del():删除 /Expire:设置过期时间---------------------------------------
var expire bool
expire, err = redisDb.Expire("test-key", 100).Result()
fmt.Print(expire)
var length2 int64
length2, err = redisDb.Del("test-key").Result()
fmt.Print(length2)
}
3.6 、Expire/ Del:过期时间/删除
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
//------------------ Del():删除 /Expire:设置过期时间---------------------------------------
var expire bool
expire, err = redisDb.Expire("test-key", 100).Result()
fmt.Print(expire)
var length2 int64
length2, err = redisDb.Del("test-key").Result()
fmt.Print(length2)
}
4、所有代码
package main
import (
"fmt"
"github.com/go-redis/redis"
)
// 声明一个全局的redisDb变量
var redisDb *redis.Client
func initRedisClient() (err error) {
redisDb = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "",
DB: 0,
})
_, err = redisDb.Ping().Result()
if err != nil {
return err
}
return nil
}
func main() {
err := initRedisClient()
if err != nil {
//redis连接错误
panic(err)
}
fmt.Println("Redis连接成功")
// ----------------------------------get/set------------------------
var key string = "test-key"
var keyValue string = "test"
err = redisDb.Set(key, keyValue, 0).Err()
if err != nil {
panic(err)
}
var value string
value, err = redisDb.Get("test-key").Result()
if err != nil {
panic(err)
}
fmt.Println("key:", value)
//------------------getSet / setNx---------------------------------------
var oldValue string
oldValue, err = redisDb.GetSet(key, "test").Result()
if err != nil {
panic(err)
}
fmt.Println(oldValue)
//如果key不存在,则设置这个key的值,并设置key的失效时间.如果key存在,则设置不生效
err = redisDb.SetNX(key, "test", 0).Err()
if err != nil {
panic(err)
}
//------------------MSet / MGet---------------------------------------
//批量设置多个key-value值
err = redisDb.MSet("key1", "value1", "key2", "value2").Err()
if err != nil {
panic(err)
}
// MGet函数可以传入任意个key,一次性返回多个值.
// 这里Result返回两个值,第一个值是一个数组,第二个值是错误信息
values, err := redisDb.MGet("key1", "key2", "key3").Result()
if err != nil {
panic(err)
}
fmt.Println(values)
//------------------GetRange():字符串截取 /Incr():增加+1 / IncrBy():按指定步长增加 /Decr 自减 /DecrBy Decrease the specified number of steps---------------------------------------
//GetRange() : key,start-从那个位置开始截取,endt-End from that position
val, err := redisDb.GetRange("test-key", 0, 4).Result()
if err != nil {
panic(err)
}
fmt.Println(val)
///Incr()设置一个age测试自增、自减
err = redisDb.Set("number", "0", 0).Err()
if err != nil {
panic(err)
}
redisDb.Incr("number") // 自增
redisDb.IncrBy("number", 10) // 自增 +10
val, err = redisDb.Get("number").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
redisDb.Decr("number") // 自减
redisDb.DecrBy("number", 3) //-3 此时age的值是22
val, err = redisDb.Get("number").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
//------------------ Append():追加 /StrLen():获取长度---------------------------------------
//会在key-value后面增加 '你好'
length, err := redisDb.Append("test-key", "你好").Result()
if err != nil {
panic(err)
}
fmt.Print("当前缓存key的长度", length)
var result string
result, err = redisDb.Get("test-key").Result()
fmt.Print(result)
num, err := redisDb.StrLen("test-key").Result()
if err != nil {
panic(err)
}
fmt.Printf("当前缓存key的长度为: %v\n", num)
//------------------ Del():删除 /Expire:设置过期时间---------------------------------------
var expire bool
expire, err = redisDb.Expire("test-key", 100).Result()
fmt.Print(expire)
var length2 int64
length2, err = redisDb.Del("test-key").Result()
fmt.Print(length2)
}
边栏推荐
- 空间平面相交的直线的计算及其源码
- Playing script killing with AI: actually more involved than me
- New material under the plastic restriction order - polylactic acid (PLA)
- 适合程序员的输入法
- STL源码剖析:class template explicit specialization代码测试和理解
- 图解关系数据库设计思想,这也太形象了
- goto语句
- The Society of Mind - Marvin Minsky
- 五号黯区靶场 mysql 注入之limit注入记录
- 舒尔补(schur completement)
猜你喜欢

UDP和TCP使用同一个端口,可行吗?

《心智社会》—马文·明斯基

空间平面相交的直线的计算及其源码

What new materials are used in the large aircraft C919?

Process and Scheduled Task Management

Rodrigues: vector representation of rotation matrices

How to understand plucker coordinates (geometric understanding)

相机坐标系,世界坐标系,像素坐标系三者转换,以及OPENGLDEFocal Length和Opengl 的 Fov转换

Playing script killing with AI: actually more involved than me

CTO说不建议我使用SELECT * ,这是为什么?
随机推荐
Station B collapsed, what would you do if you were the developer in charge that night?
bean的生命周期
New material under the plastic restriction order - polylactic acid (PLA)
理解和熟悉递归中的尝试
go : 使用 grom 删除数据库数据
2020 ACM | MoFlow: An Invertible Flow Model for Generating Molecular Graphs
UDP和TCP使用同一个端口,可行吗?
Electron之初出茅庐——搭建环境并运行第一个程序
sql concat()函数
Polygon 3D(三维平面多边形)的法向量的计算(MeshLab默认的计算)
MySQL主从复制配置搭建,一步到位
interface
Let the "label" content in Baidu map generator expand--solution
《心智社会》—马文·明斯基
Detailed explanation of numpy multidimensional array ndarray
Proof of distance calculation from space vertex to plane and its source code
Calculate the inverse source of the matrix (using the adjoint matrix, a 3x3 matrix)
New breakthrough in artificial muscle smart materials
Ali two sides: Sentinel vs Hystrix comparison, how to choose?
DNS domain name resolution services