教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 REDIS基础, GO语言

REDIS基础, GO语言

发布时间:2021-05-13   编辑:jiaochengji.com
教程集为您提供REDIS基础, GO语言等资源,欢迎您收藏本站,我们将为您提供最新的REDIS基础, GO语言资源
一安装Redis和Tcl
1.1 redis Linux
[root@kolla ~]# wget http://download.redis.io/releases/redis-3.2.8.tar.gz
[root@kolla ~]# tar -zxvf redis-3.2.8.tar.gz
[root@kolla ~]# mv redis-3.2.8 /usr/local/redis/
[root@kolla ~]# cd /usr/local/redis/
[root@kolla redis]# yum install gcc make -y
[root@kolla redis]# make
安装tcl
[root@kolla redis]# cd
[root@kolla ~]# wget https://jaist.dl.sourceforge.net/project/tcl/Tcl/8.6.1/tcl8.6.1-src.tar.gz
[root@kolla ~]# tar -zxvf tcl8.6.1-src.tar.gz -C /usr/local/
[root@kolla ~]# cd /usr/local/tcl8.6.1/unix/
[root@kolla unix]# ./configure
[root@kolla unix]# make
[root@kolla unix]# make install
[root@kolla unix]# cd /usr/local/redis/
[root@kolla redis]# make test
[root@kolla redis]# make install

[root@kolla redis]# cd /usr/local/bin/

[root@kolla bin]# ls
redis-benchmark  redis-check-rdb  redis-sentinel  tclsh8.6
redis-check-aof  redis-cli        redis-server
其中
redis-server     redis服务器
redis-cli        redis命令行客户端
redis-benchmark  redis性能测试工具
redis-check-aof  AOF文件修复工具
redis-check-rdb  RDB文件检索工具

[root@kolla ~]# mkdir -p /etc/redis
[root@kolla ~]# cp /usr/local/redis/redis.conf /etc/redis/

(2)Redis Windows
下载地址
https://github.com/microsoftarchive/redis/releases
下载3.2.100 Redis-x64-3.2.100.zip
解压之后改名字 存放在 C:\redis目录下
输入CMD 启动Redis Server
C:\Users\Administrator>cd C:\redis

C:\redis> redis-server.exe redis.windows.conf

输入CMD启动 Redis Client
C:\redis> redis-cli.exe -h 127.0.0.1 -p 6379

二修改配置文件
[root@kolla ~]# vi /etc/redis/redis.conf
     61 #bind 127.0.0.1    //绑定IP:如果需要远程访问,可将此行注释,或绑定一个真实IP
     84 port 6379
    128 daemonize yes
是否以守护进程运行
a) 如果以守护进程运行, 则不会再命令行阻塞,类似于服务
b) 如果以非守护进程运行, 则当前终端被阻塞
c) 设置为yes表示守护进程, 设置为no表示非守护进程
d) 推荐设置为yes

数据文件
    237 dbfilename dump.rdb    //做持久化存储,关机的时候内存写入到硬盘,开机硬盘到内存

数据文件存储路径
    247 dir /var/lib/redis

日志文件
    163 logfile "/var/log/redis/redis-server.log"

数据库,默认有16个 0-15
    178 databases 16

主从赋值,类似于双机备份(目前不变动)
    265 # slaveof <masterip> <masterport>

-------------------------------------
三 启动服务端和客户端
(1)服务器端开启的命令为redis-server
[root@kolla ~]# redis-server --help
Usage: ./redis-server [/path/to/redis.conf] [options]
       ./redis-server - (read config from stdin)
       ./redis-server -v or --version
       ./redis-server -h or --help
       ./redis-server --test-memory <megabytes>
Examples:
       ./redis-server (run the server with default conf)
       ./redis-server /etc/redis/6379.conf
       ./redis-server --port 7777
       ./redis-server --port 7777 --slaveof 127.0.0.1 8888
       ./redis-server /etc/myredis.conf --loglevel verbose

Sentinel mode:
       ./redis-server /etc/sentinel.conf --sentinel
[root@kolla ~]#

(2)启动redis服务器端
[root@kolla ~]# ps aux | grep redis
root       2139  0.0  0.0 136980  7952 ?        Sl   10:27   0:01 redis-server *:6379
root       2704  0.0  0.0 112716   964 pts/0    S    11:02   0:00 grep --color=auto redis
[root@kolla ~]#

四 String类型操作
[root@kolla ~]# mkdir -p /var/log/redis/
[root@kolla ~]# touch /var/log/redis/redis-server.log
[root@kolla ~]# redis-server /etc/redis/redis.conf
目前,按照这个命令启动
[root@kolla ~]# nohup redis-server &
(3)启动客户端

[root@kolla ~]# redis-cli
#总共16个数据库,0开始,下面代表0号数据库
127.0.0.1:6379>
#下面代表第十号数据库
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]>
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set name1 itcast
OK

127.0.0.1:6379> keys *
1) "name"
2) "name1"
127.0.0.1:6379> get name1
"itcast"

设置过期时间
127.0.0.1:6379> setex b1 3 itaima
OK
127.0.0.1:6379> get b1
"itaima"
127.0.0.1:6379> get b1
(nil)
一次性设置多个值
127.0.0.1:6379> mset a1 go a2 c a3 c   a4 python

中文乱码
127.0.0.1:6379> append a1 "很棒"
(integer) 8
127.0.0.1:6379> get a1
"go\xe5\xbe\x88\xe6\xa3\x92"


127.0.0.1:6379> exit
[root@kolla ~]# redis-cli --raw
127.0.0.1:6379> get a1
go很棒
127.0.0.1:6379>

获取多个数值

127.0.0.1:6379> mget a1 a2
go很棒
c

五键有关操作
查找,支持正则表达式
127.0.0.1:6379> keys a*

127.0.0.1:6379> EXISTS a1
1
127.0.0.1:6379> exists a1
1
127.0.0.1:6379>

查看键对应的value类型
127.0.0.1:6379> TYPE a1
string
127.0.0.1:6379>

删除键以及对应的值

127.0.0.1:6379> del a4
1
127.0.0.1:6379> exists a4
0
127.0.0.1:6379>

删除所有键
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
127.0.0.1:6379>

127.0.0.1:6379> mset a1 go a2 c a3 c  
OK
127.0.0.1:6379> mget a1 a2 a3
go
c
c  
127.0.0.1:6379>
127.0.0.1:6379> del a2 a3
2
127.0.0.1:6379> keys *
a1
127.0.0.1:6379>

重新设置过期时间
127.0.0.1:6379> SETEX name 100 itcast
OK
127.0.0.1:6379> expire name 10
1
127.0.0.1:6379> get name
itcast
127.0.0.1:6379> get name
127.0.0.1:6379>

六 hash类型操作
设置单个属性
127.0.0.1:6379> hset haha name lilei
127.0.0.1:6379> EXISTS haha
127.0.0.1:6379> hmset haha age 11 score 100
127.0.0.1:6379> keys *
haha
127.0.0.1:6379> keys *
haha
a1
127.0.0.1:6379> hkeys haha
name
age
score
127.0.0.1:6379>
127.0.0.1:6379> hget haha name
lilei
127.0.0.1:6379> hmget haha name age

获取所有属性的值
127.0.0.1:6379> hvals haha

删除多个
127.0.0.1:6379> hdel haha age score

七列表
(1)列表的元素类型为string
(2)按照插入顺序排序
在左侧插入数据
127.0.0.1:6379> lpush a1 a b  c
127.0.0.1:6379> LRANGE a1 0 2
127.0.0.1:6379> rpush a2 a b c
3
127.0.0.1:6379> lrange a2 0 2
a
b
c
127.0.0.1:6379>

在指定元素前后插入
127.0.0.1:6379> lrange a2 0 2
a
b
c
127.0.0.1:6379> linsert a2 before b 1
4
127.0.0.1:6379> lrange a2 0 3
a
1
b
c
127.0.0.1:6379> linsert a2 after b 2
5
127.0.0.1:6379> lrange a2 0 4
a
1
b
2
c
127.0.0.1:6379>

数值替换,替换第二个b为k

127.0.0.1:6379> LRANGE a2 0 -1
a
1
b
2
c
127.0.0.1:6379> lset a2 2 k
OK
127.0.0.1:6379> LRANGE a2 0 -1
a
1
k
2
c
127.0.0.1:6379>


八集合_set和zset相关操作
8.1 _set无序集合
。无序集合
。元素为string类型
。元素具有唯一性,不重复
。对于集合没有修改操作

增加元素
。添加元素
sadd key member1 member2
向键 'a3'的集合中添加元素'zhangsan', 'list', 'wangwu'

127.0.0.1:6379> sadd a4 zhangsan sili wangwu
127.0.0.1:6379>

。获取
返回所有的元素,获取键'a3'的集合中所有元素
127.0.0.1:6379> smembers a4
sili
wangwu
zhangsan
127.0.0.1:6379>

。删除
删除指定元素
srem key value

127.0.0.1:6379> srem a4 zhangsan
1
127.0.0.1:6379> smembers a4
sili
wangwu
127.0.0.1:6379>

8.2 zset类型(有序集合)
。sorted set有序集合
。元素为string类型
。元素䢹唯一性,不重复
。每个元素都会关联一个double类型的score, 表示权重,通过权重讲元素从小到大排序
说明:没有修改操作

8.2.1增加
127.0.0.1:6379> zadd a5 4 list 6 zhaoliu 3 zhangsan 5 wangwu
获取元素
127.0.0.1:6379> zrange a5 0 -1 按照3 4 5 6进行排序
zhangsan
list
wangwu
zhaoliu
127.0.0.1:6379>

8.2.2返回score值在min和max之间的成员
zrangebyscore key min max
例子:获取键'a4'的集合中权限值在5和6之间的成员
127.0.0.1:6379> zrangebyscore a5 5 6
wangwu
zhaoliu
127.0.0.1:6379>

8.2.3获取返回成员member的score值
zscore key member
获取键'a5'的集合中元素'zhangsan'的权重
zscore a5 zhangsan
127.0.0.1:6379> zscore a5 zhangsan
3
8.2.4删除
删除指定元素
127.0.0.1:6379> zrem a5 zhangsan

127.0.0.1:6379> zrem a5 list wangwu
2
127.0.0.1:6379> zrange a5 0 -1
zhaoliu
127.0.0.1:6379> zrem a5 zhagnsan
0
127.0.0.1:6379> zrange at 0 -1

127.0.0.1:6379> zadd a5 3 zhangsan 4 list 5 wangwu
3
127.0.0.1:6379>

127.0.0.1:6379> zrange a5 0 -1
zhangsan
list
wangwu
zhaoliu
127.0.0.1:6379>

根据权重删除

127.0.0.1:6379> ZREMRANGEBYSCORE a5 4 5
2
127.0.0.1:6379> zrange a5 0 -1
zhangsan
zhaoliu
127.0.0.1:6379>

九GO语言操作redis
[root@kolla ~]# cat redis.go
package main

import (
    "fmt"
        "github.com/gomodule/redigo/redis"
)

func main() {
    //1.连接数据库
    conn, _ := redis.Dial("tcp", ":6379")
    //3.关闭数据库
    defer conn.Close()
    //2.操作数据库

    conn.Send("set", "name", "chuanzhi")
    conn.Send("mset", "age", 11, "score", 100)
    conn.Flush()
    reply, err := conn.Receive()
    if err != nil {
            fmt.Println("redis 操作失败")
            return
    }
    fmt.Println("reply = ", reply)
    reply, err = conn.Do("set", "sex", "women")
    if err != nil {
            fmt.Println("redis 操作失败")
            return
    }
    conn.Send("MULTI")
    conn.Send("get", "name")
    conn.Send("set", "class", "one class")
    reply, err = conn.Do("EXEC")

    if err != nil {
            fmt.Println("redis 操作失败")
            return
    }

    reply, err = redis.String(conn.Do("get", "name"))
    if err != nil {
            fmt.Println("redis.String")
    }
    /*
            c.Send("SET", "foo", "bar")
            c.Send("GET", "foo")
            c.Flush()            //把缓冲区命令发到服务器
            c.Receive()          //接收set请求返回的数据
            v, err = c.Receive() //接收get请求传输的数据
    */

    reply, err = redis.Values(conn.Do("mget, name", "age"))
    if err != nil {
            fmt.Println("err = ", err)
    }
    var s string
    var i int
    redis.Scan(reply, &s, &i)
    fmt.Println(s, i)
}

[root@kolla ~]#



 

 

 

 

 

 

到此这篇关于“REDIS基础, GO语言”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
REDIS基础, GO语言
2018年最全Go语言教程零基础入门到进阶实战视频
超全的!Redis的安装和基础操作
想系统学习GO语言(Golang
Golang笔记:语法,并发思想,web开发,Go微服务相关
PHP操作Redis数据库常用方法(总结)
PHP操作Redis数据库常用方法
redis基础问答
GO语言零基础从入门到精通视频教程
请问没有任何编程基础,如何学习GO语言?

[关闭]
~ ~