redis k-v数据库、高速缓存、消息队列代理

日期: 2019-12-06 15:14 浏览次数 :

增添的风味 – Redis还帮忙 publish/subscribe, 通告, key 过期等等特色。

Redis与别的key-value存款和储蓄有哪些两样?

  • Redis有着更为复杂的数据构造而且提供对他们的原子性操作,那是一个不一样于别的数据库的升高路线。Redis的数据类型都是依据基本数据结构的同期对程序员透明,没有要求举行额外的架空。
  • Redis运转在内部存款和储蓄器中可是可以长久化到磁盘,所以在对两样数额集实行高效读写时要求权衡内部存款和储蓄器,应该为数据量无法超过硬件内部存款和储蓄器。在内存数据库方面包车型大巴另二个优点是, 比较在磁盘上亦然的繁缛的数据布局,在内部存款和储蓄器中操作起来非常轻易,那样Redis能够做过多里边复杂性很强的业务。 同期,在磁盘格式方面他们是意气风发体的以充实的措施爆发的,因为他俩并无需实行随机拜望。

redis k-v数据库、高速缓存、消息队列代理。 

 

      Redis是二个开源(BSD许可),内部存款和储蓄器存款和储蓄的数据布局服务器,可用作数据库,高速缓存和新闻队列代理。它协理字符串、哈希表、列表、集合、以不改变应万变集中,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以致差别品级磁盘长久化成效,同期通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

 

花色地址:

sub1:结合Spring 轻巧订阅/发表系统。

sub2:redis缓存应用

  • JedisPool jedis 链接连接池 单机
  • ShardedJedisPool 切成条连接池 遍及式(八个redis 运营实例) 遵照生龙活虎致性这几个hash算法动态均匀存款和储蓄及得到key-value

  • JedisSentinelPool 哨兵形式

丰硕的数据类型 – Redis协理二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

Redis 优势

  • 品质相当的高 – Redis能读的进程是110000次/s,写的速度是81000次/s 。
  • 增进的数据类型 – Redis帮助二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的装有操作都以原子性的,同期Redis还扶持对多少个操作全并后的原子性实施。
  • 增加的特征 – Redis还扶植 publish/subscribe, 布告, key 过期等等特色。

Redis 优势

Redis 简介

 

Redis 是一丝一毫开源无需付费的,信守BSD左券,是一个高品质的key-value数据库。

Redis 与其他 key - value 缓存付加物有以下四个特色:

  • Redis支持数据的长久化,能够将内部存款和储蓄器中的多寡保持在磁盘中,重启的时候能够再一次加载举办利用。
  • Redis不仅扶助简单的key-value类型的多少,同有时间还提供list,set,zset,hash等数据布局的存款和储蓄。
  • Redis援助数据的备份,即master-slave情势的数据备份。

2、写入

在支付进度中大家运用到了开源库redis如下

4、删除

//写json
func saveJsonDataToDB(c redis.Conn) {
  imap := map[string]string{"name": "waiwaigo", "phone": "13498739038"}
  value, _ := json.Marshal(imap)
  n, err := c.Do("SETNX", "jsonkey", value)
  if err != nil {
    fmt.Println(err)
  }
  if n == int64(1) {
    fmt.Println("success")
  }
}

//读json
func readJsonFromDB(c redis.Conn) {
  var imapGet map[string]string
  valueGet, err := redis.Bytes(c.Do("GET", "jsonkey"))
  if err != nil {
    fmt.Println(err)
  }

  errShal := json.Unmarshal(valueGet, &imapGet)
  if errShal != nil {
    fmt.Println(err)
  }
  fmt.Println(imapGet["name"])
  fmt.Println(imapGet["phone"])
}

3、读取

Redis是一个开源的、使用C语言编写的、协助互连网相互影响的、可依据内部存储器也可漫长化的Key-Value数据库。

文书档案地址:

func readFromDB(c redis.Conn) {
  username, err := redis.String(c.Do("GET", "name"))
  if err != nil {
    fmt.Println("redis get failed:", err)
  } else {
    fmt.Printf("Get mykey: %v n", username)
  }

}
//批量读取
func readFromDB(c redis.Conn) {
  username, err := redis.Strings(c.Do("MGET", "SEX", "name"))
  if err != nil {
    fmt.Println("redis get failed:", err)
  } else {
    fmt.Printf("Get mykey: %v n", username)
  }

}

github地址

1、数据库的总是

func delFromDB(c redis.Conn) {
  _, err := c.Do("DEL", "name", "SEX")
  if err != nil {
    fmt.Println("redis delete failed:", err)
  } else {
    fmt.Println("delete success")
  }
}
func saveToDB(c redis.Conn) {
  _, err := c.Do("SET", "name", "qiuqiu", "EX", "50")
  if err != nil {
    fmt.Println("redis set failed:", err)
  } else {
    fmt.Println("save success")
  }
}

//批量写入
_, err := c.Do("MSET", "name", "superWang", "SEX", "F", "EX", "50")
  if err != nil {
    fmt.Println("redis set failed:", err)
  } else {
    fmt.Println("save success")
  }

//tips:EX是这个值的过期时间