当前位置:网站首页>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)
}
边栏推荐
- Required request body is missing problem solving
- STL源码剖析:bound friend template friend代码测试和理解
- bean的生命周期
- The first artificial intelligence safety competition officially launched
- 进制转换。。。
- export , export default, import complete usage
- (GGG)JWT
- 识别“数据陷阱”,发现数据的可疑之处
- Ali two sides: Sentinel vs Hystrix comparison, how to choose?
- 上传文件--文件类型大全,图片类型,文档类型,视频类型,压缩包类型
猜你喜欢

New material under the plastic restriction order - polylactic acid (PLA)

Distance calculation from space vertex to straight line and its source code

向量叉乘的几何意义及其模的计算

识别“数据陷阱”,发现数据的可疑之处

The terminal connection tools, rolling Xshell

Redis下载与安装

Ali two sides: Sentinel vs Hystrix comparison, how to choose?
![[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及](/img/ac/80ab67505f7df52d92a206bc3dd50e.png)
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及

空间顶点到直线的距离计算及其源码

Go语学习笔记 - gorm使用 - 数据库配置、表新增 Web框架Gin(七)
随机推荐
Is it possible to use the same port for UDP and TCP?
STL源码剖析:class template explicit specialization代码测试和理解
Vue2进阶篇-编程式路由导航、缓存路由组件、路由的激活与失活
华为发布“十大发明”,包含计算、智能驾驶等新领域
schur completement
MySQL什么时候用表锁,什么时候用行锁?
Proof of distance calculation from space vertex to plane and its source code
Table with tens of millions of data, how to query the fastest?
【MySQL】MySQL中如何实现分页操作
理解和熟悉递归中的尝试
sizeof
Ali: How many methods are there for multi-threaded sequential operation?
Oracle查看表空间使用率及爆满解决方案
[硬核干货]由0到1,突破信息系统项目管理师(呕心沥血经验之谈)!!!
和AI一起玩儿剧本杀:居然比我还入戏
舒尔补(schur completement)
New material under the plastic restriction order - polylactic acid (PLA)
What are the access modifiers, declaration modifiers, and keywords in C#?Literacy articles
Universal js time date format conversion
空间直线到平面上的交点的计算证明及其源码