zoukankan      html  css  js  c++  java
  • Redis系列之key操作命令与Redis中的事务详解(六)

    From: http://www.cnblogs.com/knowledgesea/p/5008594.html

    序言

    本篇主要目的有二:

    1、展示所有数据类型中key的所有操作命令,以供大家学习,查阅,更深入的挖掘redis潜力。

    2、掌握redis中的事务,让你的数据完整性一致性拥有更优的保障。

    redis命令之key操作命令一览

    #查看命令keys,此命令支持glob-style的通配符格式,*表示可以匹配任意一个或多个字符,?表示任意一个字符,[abc]表示a、b、c中的任意一个字符#

    redis 127.0.0.1:6379>flushdb    ----清除当前数据库。

    redis 127.0.0.1:6379>set strkey a  ---添加string类型数据

    redis 127.0.0.1:6379>sadd setkey 1 2 3   --添加set类型的数据

    redis 127.0.0.1:6379>rpush listkey la   --添加list类型的数据

    redis 127.0.0.1:6379>zadd zsetkey 0 za   ---添加zset类型的数据

    redis 127.0.0.1:6379>hset hashkey name zlh    ---添加hash类型的数据,这几条为操作key的示例数据。

    redis 127.0.0.1:6379>keys  *key   ---输出结果为所有以'key'字符结尾的key键。strkey , setkey, listkey, zsetkey, hashkey。

    #删除命令del,后面可以跟多个key,表示同时删除多个key#

    redis 127.0.0.1:6379>del strkey   --删除string数据类型的key ,strkey

    redis 127.0.0.1:6379>del hashkey zsetkey   ----删除多个key,一个hash类型的hashkey,一个zset类型的zsetkey。

    #判断key是否存在的命令exists,存在输出1,不存在输出0#

    redis 127.0.0.1:6379>exists strkey   ---strkey被上面的命令删除啦,所以不存在,输出0.

    redis 127.0.0.1:6379>exists listkey   ---输出结果为1,因为存在。

    #将当前数据库的key移到指定数据库中的命令move,如果当前库不存在该key或者指定库中已存在,将不予操作返回数据为0#

    redis 127.0.0.1:6379>move listkey 2   ---将当前数据库的listkey,移到数据库id为2的库中。当前库中将不存在listkey。

    redis 127.0.0.1:6379>select 2   ---打开id为2的数据库

    redis 127.0.0.1:6379[2]>exists listkey    ---当前数据库为2,输出结果为1,存在listkey,迁移成功。注意端口号后面多了个数据库id

    #重命名命令rename,如果新命名在数据库中已存在,则覆盖数据库中的值#

    redis 127.0.0.1:6379>flushdb   ---清空当前数据库,重新整理数据

    redis 127.0.0.1:6379>set youname tom   ----赋值

    redis 127.0.0.1:6379>set myname zlh     ---赋值

    redis 127.0.0.1:6379>rename myname newmyname   ---重写myname为newmyname

    redis 127.0.0.1:6379>get newmyname     ----输出zlh

    redis 127.0.0.1:6379>rename newmyname youname    ---重新newmyname为youname,由于原来存在youname且值为tom,这里将覆盖tom变为zlh

    redis 127.0.0.1:6379>get youname   ---输出结果为zlh

    #设置过期时间命令expire key seconds,expireat key timestamp,这两个命名前者指定key的过期时间是相对与当前时间的秒,后者指定为过期时间是相对与1970/1/1#

    redis 127.0.0.1:6379>flushdb   ---清空当前数据库,重新整理数据。

    redis 127.0.0.1:6379>set name zlh   ---赋值

    redis 127.0.0.1:6379>expire name 30    ----自命令执行开始,30秒后name过期

    redis 127.0.0.1:6379>expireat name 1000000000000000   ---自1970/1/1日零点起的1000000000000000秒后过期。

    #查看可以的过期时间命令ttl key,不存在或者 超时返回-1#

    redis 127.0.0.1:6379>ttl name  ---返回name的剩余过期时间,输出为3,说明再有3秒就过期啦。

    #清除key的过期时间命令persist,清除原有key的过期时间,使其持久化存储#

    redis 127.0.0.1:6379>persist name   ---如果name当前存在过期时间则清除,设name为持久化存储。

    #随机从数据库返回一个key的命令randomkey#

    redis 127.0.0.1:6379>randomkey    ---输出结果为mekey,mekey为数据库中随机返回出来的。

    #返回key存放的数据类型命令type key,数据类型string,list,set,zset,hash,以字符串的类型返回#

    redis 127.0.0.1:6379>type mekey   ---输出结果为string

    Redis中事务的相关操作命令一览

    redis中的事务跟关系型数据库中的事务是一个相似的概念,但是有不同之处。关系型数据库事务执行失败后面的sql语句不在执行,而redis中的一条命令执行失败,其余的命令照常执行。

    redis中开启一个事务是使用multi,相当于begin tran,exec提交事务,discard回滚事务。下面写几个例子供理解。

    1、没有错误的命令的事务被执行

    Note:首先flushdb清空数据库,multi声明开启事务,随后的两个命令被填入redis事务的命令队列中,到exec就执行啦队列中的所有命令输出结果。

    2、有失败命令的事务被执行

    Note:lpop只能用于list数据类型,这里用在了string类型的操作,所以出错,但是在redis中其后的命令仍被执行。

    3、回滚事务

    Note:首先情况数据库,然后设置name为zlh,开启事务,再次设置name为tom,然后discard回滚事务,再次获得的name值还是zlh而没有被设置为tom,数据数据回滚成功了。

    4、监控指定的keys,被监控的keys在事务之前发生修改,且事务中包含该key,如果事务执行exec,则exec将放弃所有事务中的命令。

    Note:name在事务中改为Jim不成功,是因为用watch监控啦name,且在事务之前name发生改变,事务中的执行命令中包含name的操作。

    小结

    如果你在看到本文后有什么疑问,请加入博客左上角群,一起交流学习。

    我的redis系列博文:双击地址

  • 相关阅读:
    array_map()与array_shift()搭配使用 PK array_column()函数
    Educational Codeforces Round 8 D. Magic Numbers
    hdu 1171 Big Event in HDU
    hdu 2844 poj 1742 Coins
    hdu 3591 The trouble of Xiaoqian
    hdu 2079 选课时间
    hdu 2191 珍惜现在,感恩生活 多重背包入门题
    hdu 5429 Geometric Progression 高精度浮点数(java版本)
    【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
    hdu::1002 A + B Problem II
  • 原文地址:https://www.cnblogs.com/joeblackzqq/p/6473512.html
Copyright © 2011-2022 走看看