一.基本命令
1.SET,GET
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func IniClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
IniClient()
err := client.Set("hello", "world", 0).Err()
if err != nil {
panic(err)
}
val, err := client.Get("hello").Result()
if err != nil {
panic(err)
}
fmt.Println("val", val)
}
2.SETNX
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func IniClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
IniClient()
err := client.SetNX("name", "lisus", 0).Err()
if err != nil {
panic(err)
}
value, err := client.Get("name").Result()
if err != nil {
panic(err)
}
fmt.Println("value:", value)
}
二.hash命令
1.HSET,HGET
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func InitClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
InitClient()
err := client.HSet("user_1", "username", "tizi365").Err()
if err != nil {
panic(err)
}
username, err := client.HGet("user_1", "username").Result()
if err != nil {
panic(err)
}
fmt.Println(username)
}
2.HGETALL,HINCRBY,HKEYS,HLENS
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func IniClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
IniClient()
data, err := client.HGetAll("user_1").Result()
if err != nil {
panic(err)
}
for field, val := range data {
fmt.Println(field, val)
}
count, err := client.HIncrBy("user_1", "count", 2).Result()
if err != nil {
panic(err)
}
fmt.Println(count)
keys, err := client.HKeys("user_1").Result()
if err != nil {
panic(err)
}
fmt.Println(keys)
size, err := client.HLen("user_1").Result()
if err != nil {
panic(err)
}
fmt.Println(size)
}
3.HMSet,HExists,HDel
package main
import "github.com/go-redis/redis"
var client *redis.Client
func IniClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
IniClient()
data := make(map[string]interface{})
data["id"] = 2
data["username"] = "lisus"
//一次性保存多个hash字段值
err := client.HMSet("user_2", data).Err()
if err != nil {
panic(err)
}
// 检测id字段是否存在
err := client.HExists("key", "id").Err()
if err != nil {
panic(err)
}
}
三.list用法
Redis列表是简单的字符串列表,列表是有序的,列表中的元素可以重复。 可以添加一个元素到列表的头部(左边)或者尾部(右边) golang redis list数据操作常用函数: LPush - 从列表左边插入数据 LPushX - 跟LPush的区别是,仅当列表存在的时候才插入数据 RPop - 从列表的右边删除第一个数据,并返回删除的数据 RPush - 从列表右边插入数据 RPushX - 跟RPush的区别是,仅当列表存在的时候才插入数据 LPop - 从列表左边删除第一个数据,并返回删除的数据 LLen - 返回列表的大小 LRange - 返回列表的一个范围内的数据,也可以返回全部数据 LRem - 删除列表中的数据 LIndex - 根据索引坐标,查询列表中的数据 LInsert - 在指定位置插入数据LPUSH
1.LPush,LPushX
package main
import "github.com/go-redis/redis"
var client *redis.Client
func IniClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
err := client.LPush("sale_number", 1, 2, 3, 4, 5, 6, 7, 8).Err()
if err != nil {
panic(err)
}
}
2.RPop,RPush,5.RPushX,LPop
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func IniClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
IniClient()
val, err := client.RPop("sale_number").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
//插入一个数据
client.RPush("sale_number", 9)
val, err = client.LPop("sale_number").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
}
3.LLen,LRange,LRem
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func IniClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
IniClient()
val, err := client.LIndex("sale_number", 5).Result()
if err != nil {
panic(err)
}
fmt.Println(val)
vals, err := client.LRange("keys", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(vals)
dels, err := client.LRem("sale_number", 1, 100).Result()
if err != nil {
panic(
err)
}
fmt.Println(dels)
}
四.集合set的用法
1.SADD,SCard,SIsMember
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func InitClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
InitClient()
err := client.SAdd("num1", 100).Err()
if err != nil {
panic(err)
}
client.SAdd("num1", 100, 200, 300)
size, _ := client.SCard("num1").Result()
fmt.Println(size)
//判断元素是否在集合中
ok, _ := client.SIsMember("num1", 100).Result()
if ok {
fmt.Println("集合包含指定元素")
}
}
2.SMembers,SRem,SPop,SPopN
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func InitClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
InitClient()
es, _ := client.SMembers("num1").Result()
fmt.Println(es)
// 随机返回集合中的一个元素,并且删除这个元素
val, _ := client.SPop("num1").Result()
fmt.Println(val)
client.SRem("num1", 100)
vals, _ := client.SPopN("num1", 5).Result()
fmt.Println(vals)
}
五.有序集合
1.ZADD,ZCARD,ZCOUNT
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func InitClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
InitClient()
err := client.ZAdd("zaddr", redis.Z{
2.5,
"tizi",
}).Err()
if err != nil {
panic(err)
}
size, _ := client.ZCard("zaddr").Result()
fmt.Println(size)
count, _ := client.ZCount("zaddr", "1", "5").Result()
fmt.Println(count)
}
2.ZRANGE,ZIncrBy
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func InitClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
InitClient()
client.ZIncrBy("znum1", 2, "5")
vals, err := client.ZRange("znum1", 0, -1).Result()
if err != nil {
panic(err)
}
for _, val := range vals {
fmt.Println(val)
}
}
3.ZRangeByScore
package main
import (
"fmt"
"github.com/go-redis/redis"
)
var client *redis.Client
func InitClient() {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456",
DB: 0,
})
}
func main() {
InitClient()
op := redis.ZRangeBy{
Min: "2", //最小分数
Max: "10", //最大分数
Offset: 0, //类似sql的limit, 表示开始偏移量
Count: 5, //一次返回多少数据
}
vals, err := client.ZRangeByScore("znum1", op).Result()
if err != nil {
panic(err)
}
for _, val := range vals {
fmt.Println(val)
}
}
4.ZRangeByScoreWithScores
func main() {
InitClient()
op := redis.ZRangeBy{
Min: "2", //最小分数
Max: "10", //最大分数
Offset: 0, //类似sql的limit, 表示开始偏移量
Count: 5, //一次返回多少数据
}
vals, err := client.ZRangeByScoreWithScores("znum1", op).Result()
if err != nil {
panic(err)
}
for _, val := range vals {
fmt.Println(val.Member)
fmt.Println(val.Score)
}
}
5.ZRem,ZRemRangeByRank
func main() {
InitClient()
client.ZRem("zddr", "test2")
}
func main() {
InitClient()
client.ZRemRangeByRank("zaddr", 0, 2)
}
6.ZSCORE
func main() {
InitClient()
score, _ := client.ZScore("zaddr", "test2").Result()
fmt.Println(score)
}
7.ZRank
func main() {
InitClient()
rk, _ := client.ZRank("zaddr", "yangmi").Result()
fmt.Println(rk)
}
六.事务处理
edis乐观锁支持,可以通过watch监听一些Key, 如果这些key的值没有被其他人改变的话,才可以提交事务。
// 定义一个回调函数,用于处理事务逻辑
fn := func(tx *redis.Tx) error {
// 先查询下当前watch监听的key的值
v, err := tx.Get("key").Result()
if err != nil && err != redis.Nil {
return err
}
// 这里可以处理业务
fmt.Println(v)
// 如果key的值没有改变的话,Pipelined函数才会调用成功
_, err = tx.Pipelined(func(pipe redis.Pipeliner) error {
// 在这里给key设置最新值
pipe.Set("key", "new value", 0)
return nil
})
return err
}
// 使用Watch监听一些Key, 同时绑定一个回调函数fn, 监听Key后的逻辑写在fn这个回调函数里面
// 如果想监听多个key,可以这么写:client.Watch(fn, "key1", "key2", "key3")
client.Watch(fn, "key")
GolangRedis基础命令和数据结构操作示例
2825

被折叠的 条评论
为什么被折叠?



