go-redis/redis
地址:https://github.com/go-redis/redis
Supports:
- Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC.
- Automatic connection pooling with circuit breaker support.
- Pub/Sub.
- Transactions.
- Pipeline and TxPipeline.
- Scripting.
- Timeouts.
- Redis Sentinel.
- Redis Cluster.
- Cluster of Redis Servers without using cluster mode and Redis Sentinel.
- Ring.
- Instrumentation.
- Cache friendly.
- Rate limiting.
- Distributed Locks.
安装
go get -u github.com/go-redis/redis
创建客户端
import "github.com/go-redis/redis"
func RedisInit(addr string) (*redis.Client,error) {
redisdb := redis.NewClient(&redis.Options{
Addr: addr,
Password: "",
DB: 0,
PoolSize: 10,
})
_,err := redisdb.Ping().Result()
if err!=nil {
return nil,err
}else{
return redisdb,nil
}
}
redisdb,err:=RedisInit("192.168.10.25:6379")
RedisInit函数正确返回*redis.Client(redisdb),后续所有操作都使用这个redisdb
List操作
rpush(key, value):
将一个或多个值 value 插入到列表 key 的表尾(最右边)。
如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。
当 key 存在但不是列表类型时,返回一个错误。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.RPush("list1","a","b","c").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
---------------------------------------------------------------
3
lpush(key, value):
将一个或多个值 value 插入到列表 key 的表头
如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。
如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
当 key 存在但不是列表类型时,返回一个错误。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.RPush("list1","d").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
--------------------------------------------------------
4 //返回4表示插入后列表中有4个元素,以前是abc,当前是dabc
llen(key):返回名称为key的list的长度。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.LLen("list1").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
-----------------------------------------------------
5
lrange(key, start, end):
返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.LRange("list1",0,100).Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
ltrim(key, start, end):
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。
下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
当 key 不是列表类型时,返回一个错误。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.LTrim("list1",2,4).Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
------------------------------------------------------------
原来是d,a,b,c,d
现在是b,c,d
lindex(key, index):返回名称为key的list中index位置的元素。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.LIndex("list1",1).Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
lset(key, index, value):给名称为key的list中index位置的元素赋值。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.LSet("list1",1,"hello").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
-------------------------------------------------------------
原来是b,c,d
现在是b,hello,d
lpop(key):返回并删除名称为key的list中的首元素。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.LPop("list1").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
--------------------------------------------------
返回b
原来是b,hello,d
现在是hello,d
rpop(key):返回并删除名称为key的list中的尾元素。
func ListTest(redisdb *redis.Client) {
result,err:=redisdb.RPop("list1").Result()
if err!=nil {
fmt.Println(err)
return
}
fmt.Println(result)
}
-----------------------------------------------------
返回d
原来是hello,d
现在是hello