zoukankan      html  css  js  c++  java
  • GoLang Redis数据库操作指令&go连接redis操作指令

      Redis数据库(Remote Dictionary Server)远程字典服务器

      

      下载地址 : Link

       下载后

         

       解压后

       绿色为客户端

       红色为服务端

      

     

     

      Redis命令参考API手册

     

      1:  http://doc.redisfans.com/

     

         2: http://redisdoc.com/index.html

     

      

     

       Redis 的 五大数据类型

      1: string(字符串)

      2: Hash(哈希)

      3: List(列表)

      4: Set(集合)

      5: zset(sorted set) 有序集合

     

     

     

     Redis数据库的 Creat Read Update Delete(增删改查)操作

    • string类型操作

    • 设置key value

          set key value (set数据时,存在就修改,不存在就添加)

    • 获取key value

       get key

     

    • 切换数据库

    • 默认创建16个数据库(0-15)

       select index

    • 查看所有的key

       keys *

     

    • 查看当前数据库的key,value数量(长度)

       dbsize

     

    • 清空当前数据库数据(key,value)(谨慎操作)

       flushdb

    • 清空所有数据库的数据(key,value)(谨慎操作)

       flushall

     

    • 删除指定数据

       del 对象 key

       del monster name

    • 让数据在指定时间内获取,超时变nil

       setex name 10 zhangsan

     

    • 一次设置多个key,value

      mset name1 zhangsan name2 lisi
    • 一次获取多个key,value

      mget name1 name2

    • Hash数据类型操作

    • 设置单个数据 hset 名称 key value

       hset hero name tom

    • 获取单个数据 hget 名称 key

       hget hero name

     

    • 设置多个数据

      hmset monster2 name dybf age 18 sex man
    • 获取多个数据

    • 方法1:指定key获取

      hmget monster2 name age sex
    • 方法2:直接获取所有key,value

      hgetall monster2

    • 获取对象中有几个key,value(长度)

    • hlen 对象

      hlen monster
    • 判断在对象中是否有指定的key

      hexists 对象 key

      1表示有

      0表示无

     

    • List链表 数据类型操作

    • 有序的存储数据
    • 元素的值可以重复

      

    • lpush 从头插入数据

      lpush hero a b c
    • rpush 从尾插入数据

      rpush hero d e f

    • lpop 从头部弹出一个数据(删除)

       lpop hero

    • rpop 从尾部弹出一个数据(删除)

      rpop hero 

    • del 删除对象所有数据

      del hero
    • 获取元素方法

      lrange key start stop

      irange monster 0 -1

      (0表示从头开始,-1表示以最后一个数据结束)

     

    • list存储理解图

     

    • list操作实例图:

      

    • Set集合数据类型操作

    • 底层是HashTable

    • 无序存储

    • 元素值不可重复

    • sadd 添加数据

     sadd email a@qq.com b@qq.com c@qq.com
    • srem 删除指定数据

     srem email a@qq.com

    • smembers 获取所有数据

     smembers email
    • sismember 判断是否包含此数据

     sismember email a@qq.com

    • Set类型实例

     

      Redis 在GO中的操作

    • 在Go中安装 Redis库插件

    • 目的是可以在go中直接使用redis操作指令

    • 前提是你装了git,才能执行下列语句

      github地址:https://github.com/gomodule/redigo

      安装命令:

      go get github.com/gomodule/redigo/redis

    • GO中String类型操作Redis数据库案例

     1 package main
     2 
     3 import (
     4     "fmt"
     5 
     6     "github.com/gomodule/redigo/redis"
     7 )
     8 
     9 func main() {
    10     conn, err := redis.Dial("tcp""127.0.0.1:6379")
    11     if err != nil {
    12         fmt.Println("GO连接数据库127.0.0.1失败:", err)
    13         return
    14     }
    15     //fmt.Println("GO连接数据库成功
    ", conn)
    16     /* 往数据库里 写入数据 set */
    17     _, err2 := conn.Do("set""name""tom")
    18     if err != nil {
    19         fmt.Println("set数据错误: ", err2)
    20         return
    21     }
    22     /*延迟关闭服务器*/
    23     defer conn.Close()
    24     fmt.Println("set数据成功", conn)
    25 
    26     /* 往数据库里 请求数据 get
    27     r, err3 := redis.String(conn.Do("get""name"))
    28     */
    29     r, err3 := conn.Do("get""name")
    30     if err != nil {
    31         fmt.Println("set数据错误: ", err3)
    32         return
    33     }
    34 
    35     /* 把数据返回值从 接口 转换成 string类型 */
    36     result, _ := redis.String(r, err3)
    37 
    38     fmt.Println("get数据成功", result)
    39 }
    View Code
    
    
    
    
    • GO中Hash类型操作Redis数据库案例

      若遇下面到报错:解决方法 del 对象

      先删除这个对象 在创建获取即可

     WRONGTYPE Operation against a key holding the wrong kind of value
    

       

     1 package main
     2 
     3 import (
     4     "fmt"
     5 
     6     "github.com/gomodule/redigo/redis"
     7 )
     8 
     9 func main() {
    10 
    11     conn, err := redis.Dial("tcp""127.0.0.1:6379")
    12     if err != nil {
    13         fmt.Println("连接数据库失败: ", err)
    14         return
    15     }
    16     defer conn.Close()
    17 
    18     /* 一次操作写入 多个数据 */
    19     _, err2 := conn.Do("HMSet""hero""name""托塔李天王""age", 18, "sex""")
    20 
    21     if err != nil {
    22         fmt.Println("向 Redis数据库 写入数据 失败! :", err2)
    23         return
    24     }
    25 
    26     /* 一次 操作 获取 多个数据 */
    27     result, err3 := redis.Strings(conn.Do("HGetAll""hero"))
    28 
    29     if err3 != nil {
    30         fmt.Println("向 Redis数据库 请求数据 失败! ", err3)
    31         return
    32     }
    33     for value, key := range result {
    34         fmt.Printf("Hero[%v] = [%v]
    ", value, key)
    35     }
    36 
    37 }
    38 
    39 //输出:
    40 Hero[0] = [name]
    41 Hero[1] = [托塔李天王]
    42 Hero[2] = [age]       
    43 Hero[3] = [18]        
    44 Hero[4] = [sex]       
    45 Hero[5] = [男] 
    View Code
    • Redis 的 连接池

    • 提高连接数据库效率

      

     1 package main
     2 
     3 import (
     4     "fmt"
     5 
     6     "github.com/gomodule/redigo/redis"
     7 )
     8 
     9 var (
    10     //Pool 全局变量 连接池Pool
    11     Pool *redis.Pool
    12 )
    13 
    14 //当程序启动时初始化执行,初始化连接池
    15 func init() {
    16     Pool = &redis.Pool{
    17         MaxIdle:     10,  //最大空闲 连接数
    18         MaxActive:   0,   //与数据库的最大连接数 0表示不限制
    19         IdleTimeout: 100, //最大空闲时间,超过此事件自动回收连接
    20         Dial: func() (redis.Conn, error) {
    21             //连接的IP/端口
    22             return redis.Dial("tcp""127.0.0.1:6379")
    23         },
    24     }
    25 }
    26 
    27 func main() {
    28     //从连接池中获取一个连接
    29     conn := Pool.Get()
    30 
    31     defer conn.Close()
    32 
    33     //往数据库中写入数据
    34     _, err := conn.Do("set""name""杰克奥特曼")
    35     if err != nil {
    36         fmt.Println("往Redis中写入数据失败")
    37         return
    38     }
    39 
    40     //从数据库中获取数据
    41     result, err := redis.String(conn.Do("get""name"))
    42     if err != nil {
    43         fmt.Println("从Redis中获取数据失败!")
    44         return
    45     }
    46     fmt.Println("从Redis中获取数据成功!")
    47     fmt.Printf("name:%v", result)
    48 }
    View Code

     

     

     

     

    时间若流水,恍惚间逝去
  • 相关阅读:
    数据汇总计算和分析的反思
    排名算法计算
    仿Spring读取配置文件实现方案
    xml 配置文件规范 校验
    批量插入数据(基于Mybatis的实现-Oracle)
    shallow copy 和 deep copy 的示例
    引用对象的使用和易产生bug的示例
    codis安装手册
    Redis安装手册
    map和list遍历基础
  • 原文地址:https://www.cnblogs.com/alanshreck/p/14141675.html
Copyright © 2011-2022 走看看