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 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(字符串)

  • 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 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(哈希)

  • 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 value key 中的字段 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")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,958评论 2 27
  • 转自:http://bbs.redis.cn/forum.php?mod=viewthread&tid=481 p...
    木十2036阅读 798评论 0 7
  • 百川东到海,何时复西归? 少壮不努力,老大徒伤悲! ——《长歌行》佚名
    喜亭阅读 137评论 2 7
  • 我接触简书很偶然。我的一位朋友是某杂志主编,最近他在参加学习(就象他这样的还在不断学习,可见我更要多学),在...
    明月牵你阅读 223评论 4 7
  • 桃子,的第一次是爸爸拿走的。這讓她每次回想起來,胃都會像被一隻大手用力的攥起來揉搓,然後再狠狠的給肚子上一拳。這時...
    妙可为何穿短裙阅读 174评论 0 1