zoukankan      html  css  js  c++  java
  • Golang操作Redis

    Redis概述

    redis是业界主流的key-value,nosql数据库之一。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(列表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

    Redis优点

    • 异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
    • 支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。
    • 这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。
    • 操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
    • MultiUtility工具:Redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据;

    Redis应用场景

    • 缓存系统,减轻主数据库(MySQL/Maridb)的压力
    • 计数场景,比如微博、抖音中的关注数和粉丝数
    • 热门排行榜,需要排序的场景特别适合使用ZSET
    • 利用LIST可以实现队列的功能

    Redis部署

    1.安装Redis环境

    # linux下安装redis
    yum install redis
    
    # mac os下安装redis
    brew install redis
    

    2.启动redis

    # linux下启动redis
    systemctl start redis-server
    
    # mac os下启动redis
    ./usr/local/Cellar/redis/5.0.3/bin/redis-server
    

    3.Python操作Redis

    pip3 install redis
    

    Go操作Redis

    安装

    go get -u github.com/go-redis/redis
    

    连接

    package main
    
    import (
    	"fmt"
    	"github.com/go-redis/redis"
    )
    
    // redis
    
    var redisdb *redis.Client
    
    func initRedis()(err error){
    	redisdb = redis.NewClient(&redis.Options{
    		Addr: "127.0.0.1:6379",
    		Password: "",
    		DB: 0,
    	})
    	_,err = redisdb.Ping().Result()
    	return
    }
    
    func main(){
    	err := initRedis()
    	if err != nil {
    		fmt.Printf("connect redis failed,err:%v",err)
    		return
    
    	}
    	fmt.Println("connect redis success!")
    }
    

    基本使用

    GET/SET示例

    func basicsDemo(){
    	// 设置key
    	err := redisdb.Set("t1","Jack",0).Err()
    	if err != nil {
    		fmt.Printf("redis write failed,err:%v
    ",err)
    		return
    	}
    
    	// 获取对应的key
    	val,err := redisdb.Get("t1").Result()
    	if err != nil {
    		fmt.Printf("get t1 failed,err:%v
    ",err)
    	}
    	fmt.Println("t1",val)
    
    	val2,err := redisdb.Get("t2").Result()
    	// 判断key是否存在
    	if err == redis.Nil {
    		fmt.Println("t2 does not exist")
    	} else if err != nil {
    		fmt.Printf("get t2 failed,err:%v
    ",err)
    		return
    	} else {
    		fmt.Println("t2",val2)
    	}
    
    }
    

    ZSET示例

    func redisExample2() {
    	zsetKey := "language_rank"
    	languages := []*redis.Z{
    		&redis.Z{Score: 90.0, Member: "Golang"},
    		&redis.Z{Score: 98.0, Member: "Java"},
    		&redis.Z{Score: 95.0, Member: "Python"},
    		&redis.Z{Score: 97.0, Member: "JavaScript"},
    		&redis.Z{Score: 99.0, Member: "C/C++"},
    	}
    	// ZADD
    	num, err := redisdb.ZAdd(zsetKey, languages...).Result()
    	if err != nil {
    		fmt.Printf("zadd failed, err:%v
    ", err)
    		return
    	}
    	fmt.Printf("zadd %d succ.
    ", num)
    
    	// 把Golang的分数加10
    	newScore, err := redisdb.ZIncrBy(zsetKey, 10.0, "Golang").Result()
    	if err != nil {
    		fmt.Printf("zincrby failed, err:%v
    ", err)
    		return
    	}
    	fmt.Printf("Golang's score is %f now.
    ", newScore)
    
    	// 取分数最高的3个
    	ret, err := redisdb.ZRevRangeWithScores(zsetKey, 0, 2).Result()
    	if err != nil {
    		fmt.Printf("zrevrange failed, err:%v
    ", err)
    		return
    	}
    	for _, z := range ret {
    		fmt.Println(z.Member, z.Score)
    	}
    
    	// 取95~100分的
    	op := &redis.ZRangeBy{
    		Min: "95",
    		Max: "100",
    	}
    	ret, err = redisdb.ZRangeByScoreWithScores(zsetKey, op).Result()
    	if err != nil {
    		fmt.Printf("zrangebyscore failed, err:%v
    ", err)
    		return
    	}
    	for _, z := range ret {
    		fmt.Println(z.Member, z.Score)
    	}
    }
    
  • 相关阅读:
    杂谈
    分享一首歌——美丽的万物
    Silverlight有感
    风云的银光志Silverlight4.0教程之打印报表和图形(转)
    IIS 7.0的集成模式和经典模式
    WPF中MVVM模式原理分析与实践(转)
    使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果
    各大网站架构总结笔记(转)
    做了几天silverlight 小结一下
    Fiddler2介绍
  • 原文地址:https://www.cnblogs.com/jasonminghao/p/12387538.html
Copyright © 2011-2022 走看看