什么是Redis?Go语言操作Redis(三)
老男孩IT教育
行业新闻
2021年3月15日 14:29
Go语言操作Redis除使用 github.com/garyburd/redigo/redis第三方开源的Redis库外还可以使用github.com/go-redis/redis包。
Go语言操作Redis除使用 github.com/garyburd/redigo/redis第三方开源的Redis库外还可以使用github.com/go-redis/redis包。
安装
go get -u github.com/go-redis/redis
创建客户端
package main
import (
"log"
"github.com/go-redis/redis"
)
var redisdb *redis.Client
func init() {
db, err := RedisInit("127.0.0.1:6379")
if err != nil {
log.Panic(err)
}
redisdb = db
}
func main() {}
func RedisInit(addr string) (db *redis.Client, err error) {
db = redis.NewClient(&redis.Options{
Addr: addr,
Password: "",
DB: 0,
PoolSize: 10,
})
_, err = db.Ping().Result()
return
}
RedisInit函数正确返回*redis.Client(redisdb),后续所有操作都使用这个redisdb。
String 操作
set(key,value,expiration):给数据库中名称为key的string赋予值value,expiration为过期时间,0表示不过期。
func StringTest(redisdb *redis.Client) {
err:=redisdb.Set("key1","hello",5 * time.Second).Err()
if err!=nil {
fmt.Println(err)
return
}
err=redisdb.Set("key1","hello",0 * time.Second).Err()
if err!=nil {
fmt.Println(err)
return
}
}
get(key):返回数据库中名称为key的string的value。
func StringTest(redisdb *redis.Client) {
result,err:=redisdb.Get("key1").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
getset(key, value):给名称为key的string赋予上一次的value。
func StringTest(redisdb *redis.Client) {
result,err:=redisdb.GetSet("key1","world").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
-----------------------------------------------------------
返回上一次的值hello,设置key1新值world
mget(key1, key2,…, key N):返回库中多个string的value。
假设redis中有key1:hello1,key2:hello2
func StringTest(redisdb *redis.Client) {
//获取key1,key2的值
result,err:=redisdb.MGet("key1","key2").Result()
if err!=nil {
fmt.Println(err)
return
}
for _,value:=range result {
fmt.Println(value)
}
}
-------------------------------------------------------
hello1
hello2
setnx(key,value,expiration):将 key 的值设为 value ,当且仅当 key 不存在,expiration为过期时间,0表示不过期。
func StringTest(redisdb *redis.Client) {
//获取key1,key2的值
result,err:=redisdb.SetNX("key1","hello3",0).Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
----------------------------------------------------------
false 因为key1已经存在,所以结果返回false
mset(pairs …interface{}):批量设置多个string的值。
func StringTest(redisdb *redis.Client) {
result,err:=redisdb.MSet("key1","h1","key2","h2","key3","h3").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
msetnx(pairs …interface{}):
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。
MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。
func StringTest(redisdb *redis.Client) {
result,err:=redisdb.MSetNX("key1","1","key2","2").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
incr(key):名称为key的string增1操作。
func StringTest(redisdb *redis.Client) {
//设置key1-1
redisdb.Set("key1","1",0)
result,err:=redisdb.Incr("key1").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
-----------------------------------------------
2
incrby(key, integer):名称为key的string增加integer。
func StringTest(redisdb *redis.Client) {
//设置key1-1
redisdb.Set("key1","1",0)
result,err:=redisdb.IncrBy("key1",10).Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
----------------------------------------------------
11 key1变为11
decr(key):名称为key的string减1操作。
func StringTest(redisdb *redis.Client) {
//设置key1-10
redisdb.Set("key1","10",0)
result,err:=redisdb.Decr("key1").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
--------------------------------------------------
9
decrby(key, integer):名称为key的string减少integer。
func StringTest(redisdb *redis.Client) {
//设置key1-10
redisdb.Set("key1","10",0)
result,err:=redisdb.DecrBy("key1",4).Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
----------------------------------------------------
6
append(key, value):名称为key的string的值附加value。
func StringTest(redisdb *redis.Client) {
redisdb.Set("key1","abc",0)
result,err:=redisdb.Append("key1","def").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
------------------------------------------------------
6 //返回6,append后字符串"abcdef"长度为6
老男孩教育一直关注并投入研发力量在新技术领域,早在2012年我们开设Python开发课程,2017年率先开设GO语言培训课程,您的学习首选机构!
推荐阅读:
