加拿大购物网站排名,基于wordpress门户网站,广州好的网站建设,五华县建设局网站文章目录 一、redis的学习与使用1.Redis的基本介绍2.Redis的安装下载安装包即可3.Redis的基本使用1#xff09;Redis的启动#xff1a;2#xff09;Redis的操作的三种方式3#xff09;说明#xff1a;Redis安装好后#xff0c;默认有16个数据库#xff0c;初始默认使用0… 文章目录 一、redis的学习与使用1.Redis的基本介绍2.Redis的安装下载安装包即可3.Redis的基本使用1Redis的启动2Redis的操作的三种方式3说明Redis安装好后默认有16个数据库初始默认使用0号库编号0...15 4.Redis的五大数据类型和CRUD操作1Redis的五大数据类型是**String(字符串)**、**Hash(哈希)**、**List(列表)**、**Set(集合)**和**zset(sorted set :有序集合)**2String3Hash4List5Set 二、go操作redis1、安装第三方开源的redis库2、使用go语言开始进行操作1操作string2操作hash3批量操作Set/Get数据4给数据设置有效时间5课堂练习6Redis连接池 一、redis的学习与使用
1.Redis的基本介绍
1.Redis是NoSQL数据库不是传统的关系型数据库
官网: http://redis.io/ 和http://www.redis.cn/
2.RedisREmote DIctionary Server(远程字典服务器)Redis的性能非常高单机可以达到15W gps.通常适合做缓存也可以持久化
3是完全开源免费的高性能的(key/value)分布式内存数据库基于内存运行并支持持久化Nosql数据库是最热门的NoSql数据库之一也称为数据结构服务器
2.Redis的安装下载安装包即可
网址https://github.com/tporadowski/redis/releases
下载好后的目录结构其中有两个是redis的关键文件
redis客户端文件redis-cli.exe
redis服务器文件redis-server.exe redis结构示意图 3.Redis的基本使用
1Redis的启动
启动Redis的服务器端程序(redis-server.exe),直接双击即可运行 2Redis的操作的三种方式 说明
1使用telnet操作Redis
2使用redis-cli.exe操作Redis,双击即可进入客户端
3Golang操作redisredis基本指令
http://redisdoc.com(已失效) 3说明Redis安装好后默认有16个数据库初始默认使用0号库编号0…15
-1.添加key-val [set]
-2.查看当前redis的所有key [key * 获取key对应的值[get key]
-3.切换redis数据库[select index]
-4.如何查看当前数据库的key-val数量[dbsize] -5.清空当前数据库的key-val和清空所有数据库的key -val[flush db flushall]
4.Redis的五大数据类型和CRUD操作
1Redis的五大数据类型是String(字符串)、Hash(哈希)、List(列表)、Set(集合)和zset(sorted set :有序集合)
2String
(字符串)-介绍
-1.string是redis的基本类型一个key对应一个value
-2.string是类型是二进制安全的。除普通的字符串外也可以存放图片数据。
-3.redis中字符串value最大值是512M
举例存放一个地址信息:
address北京天安门
说明
key :address
value : 北京天安门
127.0.0.1:6379 set address beijing
OK
127.0.0.1:6379 get address
beijing
127.0.0.1:6379
-4.String字符串-CRUD
举例说明Redis的String字符串的CRUD操作
set如果存在就相当于修改不存在就是添加 /get/del
127.0.0.1:6379 del address
(integer) 1
127.0.0.1:6379 get address
(nil)
127.0.0.1:6379-5.String(字符串)-使用细节和注意事项
setex(set with expire)键秒值
127.0.0.1:6379 setex mess01 10 hello,you
OK
127.0.0.1:6379 get mess01
hello,you
127.0.0.1:6379 get mess01
hello,you
127.0.0.1:6379 get mess01
hello,you
127.0.0.1:6379 get mess01
hello,you
127.0.0.1:6379 get mess01
(nil) //mess01有效期就10秒10秒后就销毁
127.0.0.1:6379mset[同时设置一个或多个key-value对]
MSET key vlaue [key value …]
同时设置一个或多个key-value对
如果某个给定key值已经存在那么MSET会用新值覆盖原来的旧值
127.0.0.1:6379 mset worker01 tom worker02 scott
OK
127.0.0.1:6379 get worker01
tom
127.0.0.1:6379 get worker02
scott
127.0.0.1:6379 mget worker01 worker02
1) tom
2) scott3Hash
(哈希类似于golang里的Map)-介绍
Redis hash是一个键值对象集合。var user1 map[string]string
Redis hash是一个string类型的field和value的映射表hash特别适合用于存储对象
举例。存放一个User信息
user1 name 张三 age 10
说明
key : user1
name 张三 和 age 30 就是两对 field-value实操演示添加user的信息案例(name age job)
127.0.0.1:6379 hset user1 name smith
(integer) 1
127.0.0.1:6379 hset user1 age 30
(integer) 1
127.0.0.1:6379 hset user1 job golang coder
(integer) 1
127.0.0.1:6379 hget user1 name
smith
127.0.0.1:6379 hget user1 age
30
127.0.0.1:6379 hget user1 job
golang coder
127.0.0.1:6379Hash使用细节和注意事项
在给user设置name和age时前面我们是一步一步设置使用hmset和hmget可以一次性来设置多个field的值和返回多个field的值
127.0.0.1:6379 hmset user2 name jerry age 110 job java coder
OK
127.0.0.1:6379 hmget user2 name age job
1) jerry
2) 110
3) java coder
127.0.0.1:6379hlen统计一个hash有几个元素
127.0.0.1:6379 hlen user2
(integer) 3
127.0.0.1:6379hexists key field
查看哈希表key中给定域field是否存在
127.0.0.1:6379 hexists user2 name
(integer) 1
127.0.0.1:63794List
-1.(列表)-介绍
列表是简单的字符串列表按照插入顺序排序你可以添加一个元素到列表头部左边或者尾部右边
List的本质是一个链表List的元素的有序的元素的值可以重复
举例存放多个地址信息
city 北京 天津 上海
说明
北京 天津 上海 就是三个元素127.0.0.1:6379 lpush city beijing shanghai tianjing
(integer) 3
127.0.0.1:6379 lrange city 0 -10表示开头 -1表示尾部
1) tianjing
2) shanghai
3) beijing
127.0.0.1:6379-2.关于list的基本命令介绍
lpush:从左边插入数据
rpush:从右边插入数据
lrange: 用法 lrange key start stop :返回列表key中指定区间内的元素区间以偏移量start和stop指定,下标(index)参数start和stop都是以0为底也就是说以0表示列表的第一个元素以1表示列表的第二个元素以此类推。你也可以使用函数负数下标以-1表示列表的最后一个元素-2表示列表的倒数第二个元素以此类推
lpop :从我们列表的左边弹出一个数据
rpop :从我们列表的右边弹出一个数据
del : 删掉这个列表
实战演示
127.0.0.1:6379 lpush herolist aa bb cc
(integer) 3
127.0.0.1:6379 lrange herolist 0 -1
1) cc
2) bb
3) aa
127.0.0.1:6379 rpush herolist dd eee
(integer) 5
127.0.0.1:6379 lrange herolist 0 -1
1) cc
2) bb
3) aa
4) dd
5) eee
127.0.0.1:6379 lpop herolist
cc
127.0.0.1:6379 lrange herolist 0 -1
1) bb
2) aa
3) dd
4) eee
127.0.0.1:6379 rpop herolist
eee
127.0.0.1:6379 lrange herolist 0 -1
1) bb
2) aa
3) dd
127.0.0.1:6379 del herolist
(integer) 1
127.0.0.1:6379 lrange herolist 0 -1
(empty list or set)
127.0.0.1:6379 -3.List-使用细节和注意事项
1index按照索引下标获得元素从左到右编号从0开始
2LLEN key 返回列表key的长度如果key不存在则key被解释为一个空列表返回0
3List的其他说明
List数据可以从左或者右插入添加如果值全移除对应的键也就消失了
5Set
(集合)-介绍
Redis的Set是string类型的无序集合。
底层是HashTble数据结构Set也是存放很多字符串元素字符串元素是无序的而且元素的值不能重复
举例存放多个邮件列表信息
email sgggsohu.com tomsohu.com
说明
key :email
sgggsohu.com tomsohu.com 这两个就是元素
关于set的基本命令
sadd :添加元素
smembers 取出所有值
sismember 判断是否存在该成员
srem 删除指定值
127.0.0.1:6379 sadd emails tomsohu.com jackqq.com
(integer) 2
127.0.0.1:6379 smembers emails
1) tomsohu.com
2) jackqq.com
127.0.0.1:6379 sadd emails kkyy.com uuqq.com
(integer) 2
127.0.0.1:6379 smembers emails
1) uuqq.com
2) tomsohu.com
3) jackqq.com
4) kkyy.com
127.0.0.1:6379 sadd emails jackqq.com
(integer) 0 //0表示添加失败因为set的元素是不可以重复的
127.0.0.1:6379 sismember emails tomsohu.com
(integer) 1 //查看set里面是否含有tomsouhu.com这个元素 1代表存在 0代表不存在
127.0.0.1:6379 sismember emails tom~sohu.com
(integer) 0
127.0.0.1:6379 srem emails tomsohu.com
(integer) 1 //演示删除元素
127.0.0.1:6379 smembers emails
1) kkyy.com
2) uuqq.com
3) jackqq.com
127.0.0.1:6379
二、go操作redis
1、安装第三方开源的redis库
1使用第三方开源的redis库github.com/garyburd/redigo/redis
2在使用redis前先安装第三方Redis库在GOPATH路径下执行安装指令
D:\myfile\go\projectgo get github.com/garyburd/redigo/redis3安装之后可以看到如下包 特别说明在安装Redis 库之前确保已经安装并配置了git,因为是从github上下载安装库的需要使用到git
2、使用go语言开始进行操作
Set/Get接口
1操作string
说明通过golang添加和获取key-value【比如name-tom~】
package main
import (fmtgithub.com/garyburd/redigo/redis
)func main() {//通过go向redis写入数据和读取数据//1.连接到redisconn,err : redis.Dial(tcp,127.0.0.1:6379)if err ! nil {fmt.Println(redis.Dial err,err)return}defer conn.Close() //关闭//2.通过go向redis写入数据string [key-val]_, errconn.Do(Set,name,tomjerry毛毛和老鼠)if err ! nil {fmt.Println(set err,err)return}//3.通过go向redis读入数据string [key-val]r, err :redis.String(conn.Do(Get,name))if err ! nil {fmt.Println(Get err,err)return}//返回的r是interfacce{}//因为name对应的值是字符串因此我们需要转换[在一开始就用redis提供的方法进行转换]//nameString : r.(string) errofmt.Println(操作成功!,r) //操作成功! tomjerry毛毛和老鼠
}2操作hash
说明通过Golang对redis操作Hash数据类型
package main
import (fmtgithub.com/garyburd/redigo/redis
)
func main() {//通过go向redis写入数据和读取数据//1.连接到redisconn,err : redis.Dial(tcp,127.0.0.1:6379)if err ! nil {fmt.Println(redis.Dial err,err)return}defer conn.Close() //关闭//2.通过go向redis写入数据string [key-val]//写入名字_, errconn.Do(HSet,user01,name,john)if err ! nil {fmt.Println(hset err,err)return}//写入age_, errconn.Do(HSet,user01,age,10)if err ! nil {fmt.Println(hset err,err)return}//3.通过go向redis读入数据string [key-val]r1, err :redis.String(conn.Do(HGet,user01,name))if err ! nil {fmt.Println(hGet err,err)return}r2, err :redis.Int(conn.Do(HGet,user01,age))if err ! nil {fmt.Println(hGet err,err)return}fmt.Printf(操作成功! r1%v,r2%v\n,r1,r2) //操作成功! r1john,r210
}3批量操作Set/Get数据
说明通过Golang对Redis操作一次操作可以Set/Get多个key-val数
package main
import (fmtgithub.com/garyburd/redigo/redis
)
func main() {//通过go向redis写入数据和读取数据//1.连接到redisconn,err : redis.Dial(tcp,127.0.0.1:6379)if err ! nil {fmt.Println(redis.Dial err,err)return}defer conn.Close() //关闭//2.通过go向redis写入数据string [key-val]//写入名字和年龄_, errconn.Do(HMSet,user02,name,tom,age,19)if err ! nil {fmt.Println(HMSet err,err)return}//3.通过go向redis读入数据string [key-val]r, err :redis.Strings(conn.Do(HMGet,user02,name,age))if err ! nil {fmt.Println(hGet err,err)return}// fmt.Printf(r%v\n,r) //r[tom 19]for i,v : range r {fmt.Printf(r[%d]%v\n,i,v)}}4给数据设置有效时间
说明通过golang对redis操作给key-value设置有效时间
core code
//给name数据设置有效时间10s
_,err c.Do(expire,name,10)5操作List
说明通过golang对redis操作list数据类型
corecode
_,errc.Do(lpush,herolist,no1.宋江,30,no2.吴用,28)5课堂练习 package main
import (fmtgithub.com/garyburd/redigo/redis
)func main() {var names stringvar ages intvar skills string//1.连接到redisconn,err : redis.Dial(tcp,127.0.0.1:6379)if err ! nil {fmt.Println(redis.Dial err,err)return}defer conn.Close() //关闭fmt.Println(请输入names: )fmt.Scan(names)fmt.Println(请输入ages: )fmt.Scan(ages)fmt.Println(请输入skills: )fmt.Scan(skills)//go操作redis进行写的操作_, errconn.Do(HMSet,monster,name,names,age,ages,skill,skills)if err ! nil {fmt.Println(HMSet err,err)return}//go操作redis进行读的操作r, err :redis.Strings(conn.Do(HMGet,monster,name,age,skill))if err ! nil {fmt.Println(HMGet err,err)return}for i,v : range r{fmt.Printf(r[%d]%v\n,i,v)}fmt.Println(操作完成)}6Redis连接池
说明通过Golang对redis的操作还可以通过redis连接池流程如下
-1.事先初始化一定数量的连接放入到连接池
-2.当go需要操作redis时直接从redis连接池取出连接即可
-3.这样可以节省临时获取redis连接的时间从而提高效率
core code
var pool *redis.Pool
pool redis.Pool{MaxIdle:8MaxActive:0IdleTimeout:100Dial:func()(redis.Conn,error){return redis.Dial(tcp,localhost:6379)},
}
c :pool.Get()-4.示意图 package main
import (fmtgithub.com/garyburd/redigo/redis
)
//定义一个全局的pool
var pool *redis.Pool//当启动程序时就初始化连接池
func init() {pool redis.Pool{MaxIdle:8, //最大空闲连接数MaxActive:0,//表示和数据库的最大连接数0表示没有限制IdleTimeout:100,//最大空闲时间Dial:func()(redis.Conn,error){//初始化连接的代码。连接哪个ipreturn redis.Dial(tcp,localhost:6379)},}
}
func main() {//先从pool池取出一个连接conn : pool.Get()defer conn.Close()_, err :conn.Do(Set,name,汤姆猫~~)if err ! nil {fmt.Println(conn.Do err,err)return}//取出r,err :redis.String(conn.Do(Get,name))if err ! nil {fmt.Println(conn.Do err,err)return}fmt.Println(r,r)}