Redis学习教程.docx
- 文档编号:7680014
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:20
- 大小:546.65KB
Redis学习教程.docx
《Redis学习教程.docx》由会员分享,可在线阅读,更多相关《Redis学习教程.docx(20页珍藏版)》请在冰豆网上搜索。
Redis学习教程
Redis学习教程
一、redis特点和安装
1、redis官方站点:
http:
//redis.io
redis是什么:
Redisisanopensource(BSDlicensed),in-memorydatastructurestore,usedasdatabase,cacheandmessagebroker.Itsupportsdatastructuressuchasstrings,hashes,lists,sets,sortedsetswithrangequeries,bitmaps,hyperloglogsandgeospatialindexeswithradiusqueries.Redishasbuilt-inreplication,Luascripting,LRUeviction,transactionsanddifferentlevelsofon-diskpersistence,andprovideshighavailabilityviaRedisSentinelandautomaticpartitioningwithRedisCluster.
redis是开源,BSD许可,高级key-value存储系统。
可以从来存储字符串,哈希结构,链表,集合。
因此常用来提供数据结构服务。
2、redis和memcached相比的独特之处
a、redis可以用来存储(store),而memcached是用来做缓存的(cache)
这特点主要是因为具有”持久化”的功能
b、redis存储的数据有”结构”,memcached存储的数据,只有一种类型”字符串”
redis可以存储:
字符串、链表、哈希结构、集合以及有序集合
3、redis在Linux下的安装
a、下载最新版或稳点版本(stable)
b、wget文件地址//下载
c、tarzxvf下载的文件名//解压
d、cd文件目录//进入解压的目录
e、make//直接安装不用进行configure编译,这个过程中可能会出现问题,有可能是编译的时间跟现在的系统的时间有大的冲突
f、maketest//验证(可选项)如果全部都为OK就没问题
g、makePREFIX=/usr/local/redisinstall//安装(可以指定安装路径)
h、cd/usr/local/redis//进入redis安装目录,里面就一个bin目录
i、cdbin//进入bin目录
redis-benchmark:
redis性能测试工具
redis-check-aof:
检查aof日志工具
redis-check-rdb:
检查rdb日志工具
redis-cli:
连接用的客户端
redis-server:
redis服务进程
j、需要从源码目录中复制redis配置文件到redis的安装目录下
cp/****/redis源码目录/redis.conf/usr/local/redis
k、启动redis服务,需要制定配置文件路径
./bin/redis-server./redis.conf
从这里可以看到:
port端口为6379,但是现在这个我们不能使用ctrl+c关闭,这样就导致redis服务关闭,如何使其在后台运行能,请看m步骤
l、使用客户端
./bin/redis-cli
使用:
可以使用set和get命令
setsite
getsite
m、使redis以后台进程运行,修改其配置文件redis.conf文件,将daemonizeno改成daemonizeyes
修改后保存,开启redis服务
./bin/redis-server./redis.conf
psaux|grepredis//检验是否开启
这样我们再去用get获取site会发现已经丢失,如果让其不丢失,请看后续章节
n、redis默认16个数据库,配置文件databases16是从0-15,默认的操作是在0号数据库操作,切换库使用select编号[0|1..|15]
二、通用KEY操作命令
1、keysparttern查询当前有哪些key。
*:
通配任意字符
?
:
通配单个字符
[]:
通配里面某个字符
a、keys*//查询所有的key
b、keyssite//精确查找key为site的键是否存在
c、keyssi?
e//查找si开头e结尾其中任意字符
d、keyssi[td]e//查找site或side
2、randomkey随机查找一个key
3、typekey返回key存的值的类型(没有int这种类型)
4、existskey返回key是否存在(存在返回1,不存在返回0,返回整型)
5、delkey1key2key3…删除多个key(返回删除key的个数int类型)
6、renamekeynewKey给key重命名(成功返回OK),如果newKey存在,那么修改后讲被key的值覆盖了存在的newKey
7、renamenxkeynewKey修key重命名,如果newKey存在,则返回0
8、movekeynumber移动key到一个数据库,number表示数据库编号[0-15],如果移动不存在key或者另一个库已经存在该key返回值为0
9、expirekeytimeout设置key的有效时间,单位为s
10、ttlkey查看key的有效期,不存在key返回-2,不过期或已过期的key返回-1,否则返回秒数
11、pttlkey|pexpirekeytimeout使用毫秒做单位
12、persistkey让key永久有效(成功返回1)
13、flushdb清空当前数据库
14、flushall清空所有数据库
15、dbsizedb中key的个数
三、字符串类型的操作
1、setkeyvalue[ex秒数][px毫秒数][nx]/[xx]
如:
seta1ex100
setb1px10000
注意:
ex和px不能同时使用
nx:
表示key不存在时操作,如果存在返回值为nil
xx:
表示key存在时执行操作,如果不存在返回nil
2、msetkey1value1key2value2…一次插入多个值
如:
msetaaabbbccc
3、getkey获取这个key的值
4、mgetkey1key2key3…一次获取多个值,如果不存在的key返回nil
5、setrangekeyoffsetvalue把字符串的offset偏移字节改成value,如果偏移的超过了字符串值的长度使用\x00进行填充
如:
127.0.0.1:
6379>setstronetwothree
OK
127.0.0.1:
6379>setrangestr3hello
(integer)11
127.0.0.1:
6379>getstr
"onehelloree"
如果偏移超过了字符串值的长度:
127.0.0.1:
6379>setrangestr20yes
(integer)23
127.0.0.1:
6379>getstr
"onehelloree\x00\x00\x00\x00\x00\x00\x00\x00\x00yes"
6、appendkeyvalue把value追加到key值的后面
7、getrangekeystartstop获取字符串中[start,stop]范围的值
start从0开始,stop从-1开始
注意:
start>=length:
返回空字符串
stop>=length:
返回到字符串的结果
start>=stop:
返回空字符串
8、getsetkeynewValue获取key的旧值并设置一个新值
9、incrkey使key的值自动增加1,返回增加后的值
10、decrkey使key的值自动减少1,返回减少后的值
11、incrbykeynum使key的值增加num,返回增加后的值
12、decrbykeynum使key的值减少num,返回减少后的值
13、incrbyfloatkeyfloat使key的值增加float[浮点数],返回增加后的值
14、decrbyfloatkeyfloat使key的值减少float[浮点数],返回减少后的值
15、setbitkeyoffsetvalue设置二进制偏移量offset上的值
如:
127.0.0.1:
6379>setcharA
OK
127.0.0.1:
6379>getchar
"A"
127.0.0.1:
6379>setbitchar21
(integer)0
127.0.0.1:
6379>getchar
"a"
分析:
A的ascii为65,对于的二进制位01000001,如果要转成小写a的ascii为97二进制位01100001,也就是将第二位的0变成1。
反之如果将小写a变成A,那么就是将第二位的1变成0则可。
注意:
offset如果过大,则中间填0
offset最大为多少:
2^32-1,最大为512M
16、bitopORresfoo1foo2#意思是把foo1和foo2做OR运算,结果存入res中。
bitop支持的位操作有ND、OR、XOR、NOT四个。
17、getbitkeyoffset返回在指定Offset上BIT的值,0或1。
如果Offset超过stringvalue的长度,该命令将返回0,所以对于空字符串始终返回0。
18、bitcountkey获取key中位占1的个数
四、Link链表结构
链表的结构:
□□□□□□□□□□…
1123456789…
头部(下表还是从0开始)尾部
1、lpushkeyvalue把值插到链表的头部,返回值为链表中元素的个数
2、rpushkeyvalue把值插到链表的尾部,返回值为链表中元素的个数
3、lrangekeystartstop取出链表的某部分的值
如:
lrangekey0-1//取出整个链表的值
4、lpopkey弹出链表的最左边的值,返回弹出的值
5、rpopkey弹出链表的最右边的值,返回弹出的值
6、lremkeycountvalue从key链表中删除value值
注意:
删除count的绝对值个value后结束
count>0:
从表头删除
count<0:
从表尾删除
7、ltrimkeystartstop剪切key对应的链表[start,stop]一段,并把这段重新复制个key
注意:
下表还是从0开始,负数是从尾部开始
8、lindexkeyindex返回index索引上的值,下表[0,n-1]或[-1,-n]
9、llenkey返回这个链表的长度
10、linsertkeyafter|beforesearchvalue在key链表中寻找search,并在search值之前或之后插入value,如果search有多个,只会插入一个
11、rpoplpushsourcedest把source链表的尾部弹出并插入到dest链表的头部
12、brpop|blpopkeytimeout等待弹出key的尾/头元素,timeout表示等待超时时间,如果timeout为0,则一直等待
五、set(集合)结构及命令详解
特点:
无序性、唯一性、确定性
注意:
在string和link命令中,可以通过range来访问string的某几个字符或者某几个元素,但因为集合的无序性,无法通过下表和访问来访问部分元素,因此想看元素,要么随机选一个,要么全选
1.saddkeyvalue1value2…往集合key中添加,如果有重复的忽略,返回值为成功添加值的个数
2.smemberskey返回集合所有的元素
3.sremkeyvalue1value2…从集合可key中删除值为value1、value2的元素,返回值为删除的元素个数,忽略不存在的元素
4.spopkey返回并删除集合key中的1个随机元素,返回值为删除的值,随机体现了集合的无序性
5.srandmemberkey返回集合key中随机的一个元素
6.sismemberkeyvalue判断value是否存在key集合中,是返回1,否返回0
7.scardkey返回集合key中元素的个数
8.smovesourcedestvalue把source集合中的value移动到dest集合中
9.sinterkey1key2key3求出key1key2key3三个集合的交集,并返回
10.sinterstoredestkey1key2key3求出key1key2key3三个交集,返回结果存储在dest集合中,返回值为元素个数
11.sunionkey1key2..求出key1ke2..的并集,并返回
12.sdiffkey1key2…求出key1key2…的差集,并返回
六、orderset(有序集合)及命令
1.zaddkeyscore1key1score2key2…添加集合元素,必须要指定score,添加成功返回个数。
如果key相同,则不能添加成功,但是score可以相同,顺序按照添加的顺序定。
2.zrangekeystartstop[withscores]从key集合取出排序后从start到stop的元素,排序从[0,n-1],加上withscores可以将score显示出来
3.zrangebyscorekeyminmaxlimitoffsetN[withscores]从集合key中取出score从min到max的元素,可以使用limit取出部分offset为偏移量N为个数
如:
如:
127.0.0.1:
6379>zrangebyscoreclass020
1)"hai"
2)"zhj"
3)"yang"
4)"li"
127.0.0.1:
6379>zrangebyscoreclass020limit12
1)"zhj"
2)"yang"
4.zrankkeyvalue查询value在集合key中的排名位置,从[0,n-1],默认升序排列
5.zrevrankkeyvalue查询value在集合key中的排序位置,从[0,n-1],降序排列
6.zcardkey返回key集合的元素个数
7.zremkeyvalue1value2…删除集合中的元素,返回删除元素的个数
8.zremrangebyscorekeyminmax按照score来删除元素,删除score在[min,max]之间的元素,返回删除元素的个数
9.zremrangebyrankkeystartend按照排名删除元素,删除名次在[start,end]之间的元素,返回删除元素的个数
10.zcountkeyminmax返回score[min,max]区间的元素个数
11.zinterstoredestnumkeyskey1key2[weightsweight1weight2…][aggregatesum|max|min]求key1key2的交际并存放在dest集合中,可以指定其权重weight,也可以使用绝活运算sum|min|max
注意:
权重使用是weight*score
详细:
ZINTERSTOREdestinationnumkeyskey[key...][WEIGHTSweight[weight...]][AGGREGATESUM|MIN|MAX]
注意:
numkeys必须指定,为求交集的key的个数
例子:
127.0.0.1:
6379>zaddzhangsan90chinese88math70english
(integer)3
127.0.0.1:
6379>zaddlisi80chinese99math80english44other
(integer)4
127.0.0.1:
6379>zinterstoreresult2zhangsanlisi
(integer)3
127.0.0.1:
6379>zrangeresult03withscores//默认是交集求和
1)"english"
2)"150"
3)"chinese"
4)"170"
5)"math"
6)"187"
127.0.0.1:
6379>zinterstoreresult2zhangsanlisiweights23//权重的使用score*weight
(integer)3
127.0.0.1:
6379>zrangeresult03withscores
1)"english"
2)"380"
3)"chinese"
4)"420"
5)"math"
6)"473"
127.0.0.1:
6379>zinterstoreresult2zhangsanlisiaggregatemax//聚合的使用
(integer)3
127.0.0.1:
6379>zrangeresult03withscores
1)"english"
2)"80"
3)"chinese"
4)"90"
5)"math"
6)"99"
127.0.0.1:
6379>zinterstoreresult2zhangsanlisiweights23aggregatemin//聚合与权重一起使用
(integer)3
127.0.0.1:
6379>zrangeresult03withscores
1)"english"
2)"140"
3)"math"
4)"176"
5)"chinese"
6)"180"
12.ZUNIONSTOREdestinationnumkeyskey[key...][WEIGHTSweight[weight...]][AGGREGATESUM|MIN|MAX]ZUNIONSTORE命令计算numkeys联合排序按指定键,并将结果存储在目的地。
它是强制性的传递的输入键和其他(任选)参数之前,以提供输入键(numkeys)的数量
13.zincrbykeyincrementvalue为某个元素的score值增加increment
如:
127.0.0.1:
6379>zincrbyresult10english
"150"
127.0.0.1:
6379>zrangeresult0-1withscores
1)"english"
2)"150"
3)"math"
4)"176"
5)"chinese"
6)"180"
七、HASH数据类型相关命令
1.hsetkeyfieldvalue把key中的field域的值设为value,如果没有就添加,如果有就覆盖
2.hmsetkeyfiled1value1fieldsvalue2…设置多个域的值
3.hgetkeyfield返回key中的field域的值
4.hmgetkeyfield1field2…返回key中的多个field的值
5.hgetallkey返回key中的所有域和值
6.hdelkeyfield删除key中的field域
7.hlenkey返回key中元素的数量
8.hexistskeyfield判断key中有没有field域,存在返回1反之0
9.hincrbykeyfieldvalue为哈希表key中的域field的值加上增量value
10.hincrbyfloatkeyfieldvalue为哈希表key中的域field的值加上浮点增量value
11.hkeyskey返回key中所有的域
12.hvalskey返回key中所有的value
八、redis事务
redis支持简单的事务(不支持回滚,可以需要队列里的命令)
redis和mysql事务的对比
mysql
redis
开启
starttransaction
multi
语句
普通sql
普通命令
失败
rollback会馆
discard取消
成功
commit
exec
redis开启事务后,所有的语句都放在一个队列里。
注意:
rollback和discard区别
如果已经成功执行了2条语句,第3条语句出错
rollback后,前面2条的语句影响小时
discard只是结束本次是事务前的2条语句造成的影响仍然还在
在multi后面的语句中,语句出错可能有2种情况
1、语法本身问题
这种,exec时报错,所有语句都不得执行
2、语法本身没有错,但使用对象有问题,比如zadd操作link对象
exec后,会执行正确的语句,并跳过有不适当的语句
如何避免这种zadd操作link这种呢,由程序员负责
redis的事务中,启用的乐观锁,只负责监测key有没有被改动过。
watch命令:
watchkey1key2…监控key,在执行事务前使用该命令进行监视
unwatch:
取消所有的watch监视,但是unwatch不能用在事务里
九、频道发布与消息订阅
1.publishchannelcontent发布消息,返回发布到监听者的个数
2.subscribechannel1channel2…监听频道消息,可以同时监听多个
3.psubscribepattern使用通配符监听多个频道消息
如:
psubcribenews*//监听以news开头的广播
4.pubsubchannels[pattern]列出当前活跃的频道,活跃频道指的是那些至少有一个订阅者的频道,订阅模式的客户端不计算在内。
pattern参数是可选的:
如果不给出pattern参数,那么列出订阅与发布系统中的所有活跃频道。
如果给出pattern参数,那么只列出和给定模式pattern相匹配的那些活跃频道。
5.pubsubnumber[channel-1...
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Redis 学习 教程