当前位置: 首页 > 后端技术 > PHP

Redis的使用与实践

时间:2023-03-30 03:19:54 PHP

什么是Redis?Redis是远程的;redis是基于内存的;redis是一个非关系型数据库。两种数据持久化方式:Snapshotting(内存快照)和Append-Onlyfile(日志追加)三、RedisCache队列支持主从复制的应用场景——使用链表结构数据存储Redis桌面管理工具redis-desktop-managerRedis数据type存储在数据类型中的值可以被读取和写入。String可以是字符串、整数或浮点数,统称为元素到字符串的操作。整数类型的List加减就是一个序列集合,每个节点都包裹着一个元素序列。序列的两端都被压入。输入或弹出元素,修剪,查找或删除元素,设置每个不同的元素,从集合中插入或删除元素,Hash有一个key-value哈希组,其中key是一个字符串,value是添加和删除的元素根据密钥删除。SortSetwithScore-value有序的分数集合,其中score为浮点数,value为要插入的元素集,根据scores的范围找到String类型的keyvalue(string/int/float)127.0.0.1:6379>setstring1demoOK127.0.0.1:6379>getstring1"demo"127.0.0.1:6379>setstring24OK127.0.0.1:6379>getstring2"4"127.0.0.1:6379>incrstring2#增量操作integer(整数)5127.0.0.1:6379>getstring2"5"127.0.0.1:6379>decrbystring22#减去整数,string2减2(integer)3127.0.0.1:6379>getstring2"3"Listtype127.0.0.1:6379>lpushlist112#lpush表示从左边推一个元素到list1,l表示left(integer)1127.0.0.1:6379>lpushlist113(interger)2127.0.0。1:6379>rpoplist1#rpop表示从右边弹出一个元素,按照先进先出原则"12"127.0.0.1:6379>lpushlist212(integer)1127.0.0.1:6379>lpushlist213(integer)2127.0.0.1:6379>lpushlist213#list类型不要求集合中元素不重复,所以可以插入相同的元素,而set类型要求集合中元素不重复(integer)3127.0.0.1:6379>llenlist2#llencommand列出list2的元素个数(整数)3Settype127.0.0.1:6379>saddset112(integer)1127.0.0.1:6379>scardset1#使用scard查看set1的元素个数(整数)1127.0.0.1:6379>saddset113(整数)1127.0.0.1:6379>saddset113(整数)0127.0.0.1:6379>scardset1(整数)2127.0.0.1:6379>sismemberset113#sismember命令判断13是否在set1(integer)1127.0.0.1:6379>sremset113#srem命令删除13fromset1(integer)1127.0.0.1:6379>sismemberset113(integer)0Hashtype127.0.0.1:6379>hset散列键112#hset命令设置hash1的key为key1,值为12(integer)1127.0.0.1:6379>hgethash1key1#hget命令获取名为key1的hash1key的值127.0.0.1:6379>hsethash1key213(整数)1127.0.0.1:6379>hsethash1key313(整数)1127.0.0.1:6379>hlenhash1#hlen命令获取hash1(整数)的长度3127.0.0.1:6379>hsethash1key314#直接修改hash1(整数)中key3的值0127.0.0.1:6379>hgethash1key3"14“127.0。0.1:6379>hmgethash1key1key2#hmget命令一次获取多个key的值1)"12"2)"13"SortSettype127.0.0.1:6379>zaddzset110.1val1#zadd命令添加一个元素到zset1,分数为10.1,值为val1(integer)1127.0.0.1:6379>zaddzset111.2val2(integer)1127.0.0.1:6379>zaddzset19.1val3(integer)1127.0.0.1:6379>zcardzset1#zcard命令查看zset元素值in(integer)3127.0.0.1:6379>zrangezset102withscores#zrange命令打印出rank1)"val3"2)"9.1"3)"val1"4)"10.1"5)"val2"6)"11.19999999"127.0.0.1:6379>zrangezset1val2#打印出val2的排名(integer)2127.0.0.1:6379>zaddzset112.2val3(integer)0127.0.0.1:6379>zrangezset1"02withval1cores1)"2)"10.1"3)"val2"4)"11.19999999"5)"val3"6)"12.19999999"127.0.0.1:6379>zaddzset112.2val2(整数)0127.0.0.1:6379>zrangezset102withscores1)"val1"2)"10.1"3)"val2"4)"12.19999999"5)"val3"6)"12.19999999"常用命令key-value相关命令//1.keys*,表示提取所有keyredis127.0.0.1:6379>keys*1)“myzset2”2)“myzset3”3)“mylist”4)“myset2”5)“myset3”6)“myset4”7)“k_zs_1”8)“myset5”9)“myset6”10)“myset7”11)"myhash"12)"myzset"13)"age"14)"myset"15)"mylist5"16)"mylist6"redis127.0.0.1:6379>keysmylist*1)"mylist"2)"mylist5"3)"mylist6"4)"mylist7"5)"mylist8"redis127.0.0.1:6379>//2.exists确认key是否存在redis127.0.0.1:6379>existsHongWan(integer)0redis127.0.0.1:6379>existsage(integer)1redis127.0.0.1:6379>//3.del删除一个keyredis127.0.0.1:6379>delage(integer)1redis127.0.0.1:6379>existsage(integer)0redis127.0.0.1:6379>//4.expire设置key的过期时间(单位:秒)redis127.0.0.1:6379>expireaddr10(integer)1redis127.0.0.1:6379>ttladdr(integer)8redis127.0.0.1:6379>ttladdr(integer)1redis127.0.0.1:6379>ttladdr(integer)-1//我们知道taddrkey的过期时间为10秒,然后我们一直用ttl得到这个key的有效持续时间到-1表示这个值已经过期//5.move会将当前数据库中的key转移到另一个数据库redis127.0.0.1:6379>选择0www.ChinaDBA.net中国DBA超级论坛49OKredis127.0。0.1:6379>设置年龄30OKredis127.0.0.1:6379>获取年龄“30”redis127.0.0.1:6379>移动年龄1(整数)1redis127.0.0.1:6379>获取年龄(无)redis127.0.0.1:6379>select1OKredis127.0.0.1:6379[1]>getage"30"redis127.0.0.1:6379[1]>//先显式选择0号数据库,然后在这个库中设置一个key,然后我们将这个key移动了从0号数据库到1号数据库,然后我们确认0号数据库中没有这个key,但是1号数据库中存在这个key,说明我们转移成功了//6.persist去除给定key的过期时间redis127.0.0.1:6379[1]>过期年龄300(整数)1redis127.0.0.1:6379[1]>ttl年龄(整数)294redis127.0.0.1:6379[1]>坚持年龄(整数)1redis127.0.0.1:6379[1]>ttlage(integer)-1redis127.0.0.1:6379[1]>//手动设置未过期的key过期成功//7.randomkey随机返回key空间redis127.0.0.1中的一个key:6379>随机键“mylist7”redis127.0.0.1:6379>随机键“mylist5”redis127.0.0.1:6379>//8.重命名重命名keyredis127.0.0.1:6379[1]>keys*1)"age"redis127.0.0.1:6379[1]>renameageage_newOKredis127.0.0.1:6379[1]>keys*1)"age_new"//9.typeredis127.0.0.1返回值的类型:6379>typeaddrstringredis127.0.0.1:6379>typemyzset2zsetredis127.0.0.1:6379>typemylistlistserver-relatedcommands//1.ping测试连接是否存活redis127.0.0.1:6379>pingPONG//2.echoprint命令行上的一些内容redis127.0.0.1:6379>echoHelloworld"Helloworld"//3.selectselectdatabaseRedis数据库编号范围是0到15,我们可以选择任意一个数据库进行数据访问。redis127.0.0.1:6379>select1OKredis127.0.0.1:6379[1]>select16(error)ERRinvalidDBindexredis127.0.0.1:6379[16]>//4.quit退出连接redis127.0.0.1:6379>quit[root@localhostredis-2.2.12]#//5.dbsize返回当前数据库中key的个数redis127.0.0.1:6379>dbsize(integer)18redis127.0.0.1:6379>//6.info获取theserver's信息和统计redis127.0.0.1:6379>info#Serverredis_version:3.2.100redis_git_sha1:00000000redis_git_dirty:0redis_build_id:dd26f1f93c5130eeredis_mode:standaloneos:Windowsarch_bits:64multiplexing_api:WinSock_IOCPprocess_id:2528..redis127.0.0.1:6379>//7.configget获取服务器配置信息,configget*表示获取所有redis127.0.0.1:6379>configgetdir1)"dir"2)"/root/4setup/redis-3.2.100"redis127.0.0.1:6379>//8.flushdbdelete当前选中数据库中的所有keyredis127.0.0.1:6379>dbsize(integer)18redis127.0.0.1:6379>flushdbOKredis127.0.0.1:6379>dbsize(integer)0//9.flushall删除所有数据库中的所有keyredis1个27.0。0.1:6379[1]>dbsize(整数)1redis127.0.0.1:6379[1]>select0OKredis127.0.0.1:6379>flushallOKredis127.0.0.1:6379>select1OKredis127.0.0.1:6379[1]>dbsize(integer)0redis127.0.0.1:6379[1]>PHP操作RedisString类型//common设置/获取操作$redis->set('library','predis');$retval=$redis->get('图书馆');回声$retval;//display'predis'echo"


";//setex设置一个存储时间限制$redis->setex('str',10,'bar');//表示存储有效期为10秒echo$redis->get('str');//setnx/msetnx相当于add操作,不会覆盖已有值var_dump($redis->setnx('foo',12);//truevar_dump($redis->setnx('foo',34));//foo已经存在,不能被覆盖,所以returnfalse//getset操作,set的变体,结果返回替换前的值echo$redis->getset('foo',56);//return12echo$redis->get('foo');//返回56echo"
";//incrby/incr/decrby/decr自增自减echo$redis->incr('foo');//foo是57echo$redis->incrby('foo',2);//foois59echo"
";//exists检测是否有值var_dump($redis->exists('foo'));//true//deldeletevar_dump($redis->del('foo'));//trueecho$redis->get('foo');//空//type类型检测,string返回string,list返回list,settable返回回到set/zset,哈希表返回hashvar_dump($redis->type('foo'));//不存在,返回0$redis->set('str','test');//追加连接到已经有一个字符串$redis->append('str','_123');//返回累计字符串长度8,本次输入str为'test_123'echo$redis->get('str');//test_123echo"
";//获取操作的substr部分echo$redis->substr('str',0,2);//表示从第0个开始,获取第2个字符,一共of3,Return'tes'//strlen获取字符串长度echo$redis->strlen('str');//str为test_123,字符长度为8//setbit/getbit位存储和获取echo$redis->setbit('binary',31,1);//表示第31位存1,这里可能有大小端问题?不过没关系,getbit应该没有问题echo$redis->getbit('binary',31);//返回1//keys模糊搜索功能,支持*和?($redis->keys('foo*'));//返回数组([0]=>foo1[1]=>foo2)print_r($redis->keys('f?o?'));//同上Array([0]=>foo1[1]=>foo2)//randomkey随机返回一个keyecho$redis->randomkey();//可能返回'foo1'或'foo2'以及任何其他存在的Redis的key//rename/renamenx重命名key,不同的是renamenx不允许将其更改为现有的key$redis->rename('str','str2');//将原来的重命名为'str'将键更改为'str2'//expire设置key-value的时效性,ttl获取剩余有效期,persist重置为永久存储$redis->expire('foo',1);//设置有效期为1秒$redis->ttl('foo');//returnvalidityperiodvalue1secho"
";//dbsize返回redis当前数据库的记录总数echo$redis->dbsize();