redis数据库与go中的使用

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

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

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

基本

通过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 keykey 存在时删除 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(字符串)

  • string可以包含任何数据。比如jpg图片或者序列化的对象
  • 一个键最大能存储512MB
命令描述返回
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 valuekey不存在时设置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值加numnewkey,无key初始化为0再加num否则返回错误
Incrbyfloat key float同上 浮点数类型同上
Decr key使key值减一同上
Decrby key int64使key值减去num同上
Append key value给key追加valuenewkey的长度 无key等于set

Hash(哈希)

  • hash 是一个键值(key=>value)对集合。
  • hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 每个 hash 可以存储 232 -1 键值对(40多亿)
命令描述返回
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 valuekey 中的字段 field 的值设为 value新建字段返回1覆盖返回0
Hsetnx key field value字段 field 不存在时设置哈希表字段的值成功1失败0
Hvals key获取哈希表中所有值不存在返回空列表

List(列表)

  • Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
  • 列表最多可存储 232 – 1 元素 (4294967295, 每个列表可存储40多亿)。

Set(集合)

  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  • 集合中最大的成员数为 232 – 1(4294967295, 每个集合可存储40多亿个成员)。

Zset(有序集合)

  • string类型元素的集合,且不允许重复的成员
  • 每个元素都会关联一个double类型的分数,通过分数来为集合中的成员进行从小到大的排序。
  • 成员是唯一的,但分数(score)却可以重复

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")
    原文作者:blossom_绽放
    原文地址: https://www.jianshu.com/p/3f4297b6bff9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞