Redis学习教程.docx

上传人:b****5 文档编号:7680014 上传时间:2023-01-25 格式:DOCX 页数:20 大小:546.65KB
下载 相关 举报
Redis学习教程.docx_第1页
第1页 / 共20页
Redis学习教程.docx_第2页
第2页 / 共20页
Redis学习教程.docx_第3页
第3页 / 共20页
Redis学习教程.docx_第4页
第4页 / 共20页
Redis学习教程.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Redis学习教程.docx

《Redis学习教程.docx》由会员分享,可在线阅读,更多相关《Redis学习教程.docx(20页珍藏版)》请在冰豆网上搜索。

Redis学习教程.docx

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...

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1