package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
/*
redis操作之 string
exists 检查是否存在某个key
set key value ex time 键 值 过期模式 时间
eg:
127.0.0.1:6379> set a 444 ex 10
setnx key value 只有key不存在的情况下,将key的值设置为value
eg:
127.0.0.1:6379> setnx a 333
(integer) 1
127.0.0.1:6379> get a
"333"
setex key seconds value 将key的值设置为value 并将key的生存时间设置为seconds秒 若key存在则覆盖
eg:
127.0.0.1:6379> setex a 3 bb
OK
ttl 查看key的生存时间
127.0.0.1:6379> ttl a
(integer) -2
psetex key milliseconds value 和setex类似, 但以毫秒为单位。
eg:
127.0.0.1:6379> psetex a 10000 ccccccc
OK
127.0.0.1:6379> ttl a
(integer) 8
127.0.0.1:6379> ttl a
(integer) 7
getset key value 设置key的值为value并返回vkey在设置之前的旧值
strlen key 返回key存储的字符串的长度
append key value 若key存在则追加 key不存在则设置为value
eg:
127.0.0.1:6379> strlen a
(integer) 3
127.0.0.1:6379> append a bbbb
(integer) 7
setrange key offset value 范围设置, offset起始位置, 然后依次往后替换value
时间复杂度为O(M) M 为value的长度
eg:
127.0.0.1:6379> get a
"eeebbbb"
127.0.0.1:6379> setrange a 3 fff
(integer) 7
127.0.0.1:6379> get a
"eeefffb"
127.0.0.1:6379> setrange a 77 kkk
(integer) 80
127.0.0.1:6379> get a
"eeefffb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00kkk"
getrange key start end 返回key存储的字符串的指定部分, 字符串的截取范围由start 和 end 两个偏移量决定 (包括 start 和 end 在内)。
负的偏移量表示从字符的的尾部开始计数, -1表示最后一个字符串, -2表示倒数第二个字符串, 以此类推
时间复杂度 O(n) 其中 N 为被返回的字符串的长度。
域值超过长度,则返回从start到结尾的字符串
incr key 为key存储的字符串数字值加上一
eg:
127.0.0.1:6379> set c 10
OK
127.0.0.1:6379> incr c
(integer) 11
incrby key increment 同上 不过可以设置增加的increment
eg:
127.0.0.1:6379> set c 10
OK
127.0.0.1:6379> incr c
(integer) 11
127.0.0.1:6379> incrby c 10
(integer) 21
incrbyfloat key increment
无论假发计算所得的浮点数的实际精度有多长INCRBYFLOAT 命令的计算结果最多只保留小数点的后十七位。
eg:
127.0.0.1:6379> set f 64.5
OK
127.0.0.1:6379> incrbyfloat f 22.1
"86.6"
decr key 为key的数字值减去1 若key不存在, 那么键key的值会仙贝初始化为0然后在执行decr操作
eg:
127.0.0.1:6379> decr c
(integer) 20
mset key value key value 设置多个key和value
msetnx key value key value 当且晋档所有给定的键都不存在时, 为所有给定键设置值
即使只有一个给定键已经存在, MSETNX 命令也会拒绝执行对所有键的设置操作。
msetnx 是一个原子性操作, 所有给定键要么就全部被设置,要么就全部都不设置, 不可能出现第三种状态
mget 获取多个key的值命令将返回一个列表, 列表中包含了所有给定键的值。
*/
func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("connect redis error: ", err)
return
}
defer conn.Close()
// set
_, err = conn.Do("SET", "language", "goalng")
if err != nil {
fmt.Println("set error: ", err)
}
// get
r, err := redis.String(conn.Do("GET", "language"))
if err == nil {
fmt.Println(r)
}
// mset
_, err = conn.Do("MSET", "name", "zhangsan", "age", 22)
if err != nil {
fmt.Println("mset error: ", err)
}
// mget
mr, err := redis.Strings(conn.Do("MGET", "name", "age"))
fmt.Println(mr[0])
hr, err := redis.StringMap(conn.Do("MGET", "name", "age"))
fmt.Println(hr)
// incr
conn.Do("incr", "age")
age, err := redis.String(conn.Do("GET", "age"))
if err == nil {
fmt.Println(age)
}
// getrange
rg, err := redis.String(conn.Do("getrange", "name", 1, 3))
if err == nil {
fmt.Println("name getrange 1-3: ", rg)
}
conn.Do("msetnx", "name", "zhang", "age", 18)
ch, err := redis.StringMap(conn.Do("mget", "name", "age"))
fmt.Println("msetnx 当所有key都不存在的时候才会设置")
fmt.Println(ch)
}
网友评论