redis数据库与go中的使用

2017-12-21  本文已影响728人  blossom_绽放

对于redis的学习,感谢菜鸟教程提供的优秀资料
随着学习的深入,此文章持续更新...

Redis 是 key - value 型数据库,有以下三个特点:

基本

通过homebrew安装

brew install redis

通过homebrew安装Redis Desktop Manager 是一个redis桌面管理工具

brew cask install rdm

启动redis / 关闭redis

redis-server

redis-cli shutdown

进入redis命令界面 --raw 解决乱码问题

redis-cli --raw

选择数据库 默认数据库为0

SELECT 0   # ok

通过 config 命令查看或设置配置项

config get config_setting_name
# 查看所有配置
config get * 
# 设置配置
config set config_setting_name new_config_value
config set loglevel "notice"

config get loglevel 
# "notice"

命令

Keys

命令 描述 返回
Del key key 存在时删除 key 删除的数量
Exists key 检查key值是否存在 存在1否则0
Expire key 已秒设置过期时间 成功1否则0
Expireat key unix时间戳设置过去时间 成功1否则0
PEXPIRE key 以毫秒设置过期时间 成功1否则0
KEYS * 查找所有符合给定模式的 key 符合查询要求的数组
Move key database 移动key值到其他数据库 成功1否则0
PERSIST key 移除key的过期时间 成功1否则0
Pttl key 以毫秒为单位返回过期时间 无key:-2 无过期时间: -1 否则返回时间
TTL key 以秒为单位返回key的过期时间 无key:-2 无过期时间: -1 否则返回时间
RANDOMKEY 从当前数据库中随机返回一个 key 无key返回nil
RENAME oldkey newkey 修改 key 的名称 成功:ok 失败返回错误 新key存在覆盖新key
Renamenx oldkey newkey 仅当 newkey 不存在时,将 key 改名为 newkey 成功1否则0
TYPE key 返回 key 所储存的值的类型 无key返回none

String(字符串)

命令 描述 返回
SET key value 设置key value 成功后返回ok
Get key 获取指定 key 的值 无key返回nil
Getrange key start end 返回 key 中字符串值的子字符 截取的子字符串
GETSET key value 将给定 key 的值设为 value 返回 key 的旧值(old value) 无key返回nil
MGET key1 key2 获取所有(一个或多个)给定 key 的值 一个包含所有给定 key 的值的列表
SETEX key time(s) value 重设key与过期时间 成功ok
SETNX key value key不存在时设置value 成功1失败0
STRLEN key 返回 key的长度 无key返回0
MSET key1 value1 key2 value2 同时设置多个key与value 总是ok
MSETNX key1 value1 key2 value2 同时设置多个不存在的key与value 全部成功返回1否则0
PSETEX key time(s) value 毫秒为单位设置过期时间 成功ok
INCR key 使key值加一 newkey,无key初始化为0再加1否则返回错误
Incrby key int64 使key值加num newkey,无key初始化为0再加num否则返回错误
Incrbyfloat key float 同上 浮点数类型 同上
Decr key 使key值减一 同上
Decrby key int64 使key值减去num 同上
Append key value 给key追加value newkey的长度 无key等于set

Hash(哈希)

命令 描述 返回
Hdel key field1 删除一个或多个哈希表字段 成功删除的数量
Hexists key field1 查看指定字段是否存在 存在1 否则0
HGET key field1 返回指定字段的值 不存在返回nil
Hgetall key field1 返回整个key 不存在返回空列表
HINCRBY key field1 int64 为key 中的指定字段的整数值加上指定增量 此字段的新值
HINCRBYFLOAT key field1 float 浮点数版本 同上
Hkeys key 获取所有哈希表中的字段 不存在返回空列表
Hlen key 获取哈希表中字段的数量 不存在返回0
Hmget key field1 field2 获取所有给定字段的值 不存在返回nil
Hmset key field1 value1 field2 value2 同时将多个 field-value (域-值)对设置到 key 中 成功返回ok
Hset key field value key 中的字段 field 的值设为 value 新建字段返回1覆盖返回0
Hsetnx key field value 字段 field 不存在时设置哈希表字段的值 成功1失败0
Hvals key 获取哈希表中所有值 不存在返回空列表

List(列表)

Set(集合)

Zset(有序集合)

Golang redis 操作

golang操作redis,使用redis.v6的一些简单说明

使用

go get gopkg.in/redis.v6
import "gopkg.in/redis.v6"

创建客户端

通过 redis.NewClient 函数即可创建一个 redis 客户端, 这个方法接收一个 redis.Options 对象参数, 通过这个参数, 我们可以配置 redis 相关的属性, 例如 redis 服务器地址, 数据库名, 数据库密码等.

func createClient() *redis.Client {
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "",
        DB:       0,
    })

    // 通过 cient.Ping() 来检查是否成功连接到了 redis 服务器
    pong, err := client.Ping().Result()
    fmt.Println(pong, err)

    return client
}

string

set get操作,第三个参数是过期时间, 如果是0, 则表示没有过期时间.

err := client.Set("name", "xys", 0).Err()

val, err := client.Get("name").Result()

这里设置过期时间.

err = client.Set("age", "20", 1 * time.Second).Err()

list

在名称为 fruit 的list尾添加一个值为value的元素

client.RPush("fruit", "apple")

在名称为 fruit 的list头添加一个值为value的 元素

client.LPush("fruit", "banana") 

返回名称为 fruit 的list的长度

length, err := client.LLen("fruit").Result() 

返回并删除名称为 fruit 的list中的首元素

value, err := client.LPop("fruit").Result() 

返回并删除名称为 fruit 的list中的尾元素

value, err = client.RPop("fruit").Result() 

set

向 blacklist 中添加元素

client.SAdd("blacklist", "Obama")

向 whitelist 添加元素

client.SAdd("whitelist", "the Elder")

判断元素是否在集合中

isMember, err := client.SIsMember("blacklist", "Bush").Result()

求交集, 即既在黑名单中, 又在白名单中的元素

names, err := client.SInter("blacklist", "whitelist").Result()

获取指定集合的所有元素

all, err := client.SMembers("blacklist").Result()

hash

向名称为 user_xys 的 hash 中添加元素 name

client.HSet("user_xys", "name", "xys")

批量地向名称为 user_test 的 hash 中添加元素 name 和 age

client.HMSet("user_test", map[string]string{"name": "test", "age":"20"})

单独获取名为 user_test 的 age 字段

age, err := client.HGet("user_test", "age").Result()

批量获取名为 user_test 的 hash 中的指定字段的值.

fields, err := client.HMGet("user_test", "name", "age").Result()

获取名为 user_xys 的 hash 中的字段个数

length, err := client.HLen("user_xys").Result()

删除名为 user_test 的 age 字段

 client.HDel("user_test", "age")
上一篇 下一篇

猜你喜欢

热点阅读