Go语言与Docker操作Redis
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言与Docker操作Redis相关的知识,希望对你有一定的参考价值。
参考技术A 首选,如果之前使用过redis容器,我们需要先remove掉之前的容器然后创建redis容器,并运行
进入redis容器中
接着我们通过 redis-cli 连接测试使用 redis 服务
setex指令 可以设置数据存在的时间, setex key second value
MSET 一次设置多个key-value
MGET一次获取多个key-value
HGET
HGETALL
Hlen和hexist
Lpush 和 Lrange
Lpop和Rpop 从链表取出并移走数据
删除链表所有数据 DEL
字符串无序 不能重复
从连接池中Get出一个conn连接
Go开源宝藏Go 语言操作 Redis
目录
1. Redis简介
Redis支持诸如字符串(strings)
、哈希(hashes)
、列表(lists)
、集合(sets)
、带范围查询的排序集合(sorted sets)
、位图(bitmaps)
、hyperloglogs
、带半径查询
和流的地理空间索引(geospatial indexes)
等数据结构。
方法 | 作用 | 参数 |
---|---|---|
Set | 添加kv | 键 string, 值 interface, 过期时间 time.Duration |
Get | 获取值 | 键 string |
Del | 删除kv | 键 …string |
HSet | 给散列添加kv | 散列的键, 散列中的键 string, 值 interface |
HGet | 获取散列kv的值 | 散列的键, 散列中的键 string |
FlushAll | 删光 | 无 |
Ping | 心跳验证 | 无 |
Exists | 确认键是否存在 | 键 …string |
Expire | 给key设置过期时间 | 键 string, 过期时间 time.Duration |
Incr | 增加键 | 键 string |
Close | 关闭连接 | 无 |
Watch | 监听键,键出现时执行方法 | 方法 func(*Tx) error, 键 …string |
Decr | 值减一 | 键 string |
2. Go语言连接Redis
驱动:github.com/go-redis/redis
- 定义 redisClient
var Redis *redis.Client
- 连接
func connect()
client := redis.NewClient(&redis.Options
Addr: "127.0.0.1:6379",
//Password: "redisPassword", // 无密码,就这样就好了
DB: 3,
)
_, err := client.Ping().Result() // 心跳验证
if err != nil
log.Println(err)
panic(err)
Redis = client
fmt.Println("connect success")
3. String 操作
3.1 Set & Get
Set 源码
可以看到这个set的第一个参数就是key,第二个参数是value,第三个参数就是过期时间。
Get 源码
- set Key、Value以及过期时间
Key 为Fan,Value为One,过期时间为3s
redisClient.Set("Fan","One",3*time.Second)
- 在
3s
内打印出来
val := redisClient.Get("Fan")
if val == nil
fmt.Println("Value get error")
3s
过后
time.Sleep(3*time.Second)
fmt.Println("3s passing")
val = redisClient.Get("Fan")
fmt.Println("name ", val)
- 结果
第一个是在3s
内,是可以打印出来的。
第二个是过了3s
的,已经是nil
了。
del
操作与 get
操作类似
3.2 Incr & Incrby
3.2.1 Incr 加 1
redisClient.Set("Fan", "1", 3*time.Second)
val := redisClient.Get("Fan")
if val == nil
fmt.Println("Value get error")
fmt.Println("Incr before:", val)
num := redisClient.Incr("Fan")
fmt.Println("Incr after:", num)
- 结果
3.2.2 Incrby 加 val
Incrby(key, integer):名称为key的string增加integer
redisClient.Set("One", "1", 3*time.Second)
val := redisClient.Get("One")
if val == nil
fmt.Println("Value get error")
fmt.Println("IncrBy before:", val)
num := redisClient.IncrBy("One",2)
fmt.Println("IncrBy after:", num)
- 结果
3.3 MSet & MGet
设置多个 key value
MSet(key1, value1, key2, value2, key3, value3)
获取多个key
MGet(key1, key2, key3)
redisClient.MSet("Fan","One", "1","2","key1","value1")
val := redisClient.MGet("Fan","1","key1")
if val == nil
fmt.Println("Value get error")
fmt.Println(val)
- 结果
3.4 总结
做一些总结,就不再过多展示了
操作 | 解释 |
---|---|
Set(key, value) | 给数据库中名称为key的string赋予值valueget(key):返回数据库中名称为key的string的value |
GetSet(key, value) | 给名称为key的string赋予上value的值 |
Del(Key) | 删除名称为key的value |
MSet(key N, value N) | 批量设置多个string的值 |
MGet(key1, key2,…, key N) | 返回库中多个string的value |
SetNX(key, value) | 添加string,名称为key,值为value |
MSetNX(key N, value N) | 如果所有名称为key i的string都不存在 |
SetXX(key, time, value) | 向库中添加string,设定过期时间time |
Incr(key) | 名称为key的string增1操作 |
Incrby(key, integer) | 名称为key的string增加integer |
Decr(key) | 名称为key的string减1操作 |
Decrby(key, integer) | 名称为key的string减少integer |
Append(key, value) | 名称为key的string的值附加valuesubstr(key, start, end):返回名称为key的string的value的子串 |
最后提醒一下redis的默认过期时间
是 不过期
,所以如果没有设置过期时间的话,要手动del
掉
val := redisClient.MGet("Fan","1","key1")
if val == nil
fmt.Println("Value get error")
fmt.Println(val)
res := redisClient.Del("1")
fmt.Println(res)
已经没有这个value
了
4. List 操作
4.1 RPush
在名称为key的list尾添加一个值为value的元素
val:=redisClient.RPush("F", []string"One", "Two", "Three","Four")
if val == nil
fmt.Println("Value get error")
fmt.Println(val)
4.2 LLen & LRange
- LLen:返回名称为key的list的长度
- LRange:返回名称为key的list中start至end之间的元素
val:=redisClient.RPush("F", []string"One", "Two", "Three","Four")
if val == nil
fmt.Println("Value get error")
fmt.Println("F List:",val)
val = redisClient.LLen("F")
fmt.Println("len:",val)
res := redisClient.LRange("F",0,2)
fmt.Println("LRange:",res)
4.3 总结
操作 | 名称 |
---|---|
RPush(key, value) | 在名称为key的list尾添加一个值为value的元素 |
LPush(key, value) | 在名称为key的list头添加一个值为value的 元素 |
LLen(key) | 返回名称为key的list的长度 |
LRange(key, start, end) | 返回名称为key的list中start至end之间的元素 |
LTrim(key, start, end) | 截取名称为key的list |
LIndex(key, index) | 返回名称为key的list中index位置的元素 |
LSet(key, index, value) | 给名称为key的list中index位置的元素赋值 |
LRem(key, count, value) | 删除count个key的list中值为value的元素 |
LPop(key) | 返回并删除名称为key的list中的首元素 |
RPop(key) | 返回并删除名称为key的list中的尾元素 |
BLPop(key1, key2,… key N, timeout) | lpop命令的block版本 |
BRPop(key1, key2,… key N, timeout) | rpop的block版本 |
RPopLPush(srckey, dstkey) | 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部 |
参考链接
https://blog.csdn.net/weizhong1988/article/details/88048246
以上是关于Go语言与Docker操作Redis的主要内容,如果未能解决你的问题,请参考以下文章