redis功能强大,支持数据类型丰富,以下是redis操作命令大全,基本上涵盖了redis所有的命令,并附有解释说明,大家可以收藏、参考。

    温馨提示:
    1.redis的key名要区分大小写;
    2.在redis中除了 和空格外,其他的字符都可以做为key名,且长度不做限制,不过为了性能考虑,一般key名不要设置的太长。

    一:redis命令基本篇
    1.【 set key value 】 存入一个key和值。如:set myname reson
    2.【 get key 】 读取一个key的值。
    3.【 del key 】 删除一个key。
    4.【 del key1 key2 … keyN 】 删除多个key。如:del myname1 myname2
    5.【 exists key 】 判断一个key是否存在。
    6.【 type key 】 查看key的类型。
    7.【 rename key keyNew 】 重命名key名。如:rename myname myname2
    8.【 dbsize 】 查看当前库中的key的条数。
    9.【 expire key time 】 指定key的过期时间,单位为秒。如:expire myname 9(设置9秒后过期)
    10.【 ttl key 】 查看redis有多长时间过期,单位为秒。
    11.【 keys 】 列出当前库中所有的key名。
    12.【 keys a
    】 列出当前库中所有以字符串”a”开头的key。
    13.【 select db-index 】 选择一个数据库,如选择第一个数据库:select 0;选择第二个 select 1;默认有16个数据库,这个值可以在redis.conf中配置。
    14.【 flushdb 】 清掉当前库中所有的key(生产环境下需谨慎操作)。
    15.【 flushall 】 清掉所有库中全部的key(生产环境下需谨慎操作)。
    16.【 mset key1 value1 key2 value2 … keyN valueN 】 一次性存入多个key和值。
    17.【 mget key1 key2 … keyN 】 一次性读取多个key。
    18.【 incr key 】 可以对key类型+1的操作(相当于编程语言里面的++),只能操作number型,操作字符串会报错。可对新值进行操作。
    19.【 decr key 】 可以对key类型-1的操作(相当于编程语言里面的—),只能操作number型,操作字符串会报错。
    20.【 incrby key num 】 同incr,对key的值加num,比如 incrby aa 10,对aa+10。
    21.【 decrby key num 】 同上,对key的值减num。
    22.【 append key value 】 对指定key的字符串进行追加,如果key为整形,会被转为字符串。如aa的值为9,执行append aa 10后,会变成910。
    23.【 substr key start end 】 对key进行截取start到end个字符。如aa的值为:abcdef,执行substr aa 2 3后,返回”cd”。

    二:redis链表类型(list)命令
    24.【 lpush key value 】 往队列头部插入一个元素
    25.【 rpush key value 】 从尾部插入一个元素
    26.【 lpop key 】 从队列头部删掉一个元素
    27.【 rpop key 】 从队列尾部删掉一个元素,并返回被删除元素的值
    28.【 llen 】 返回队列的长度,即里面有多少个元素。不存在key返回0,不为队列类型的key会返回报错。
    29.【 lrange key start end 】 返回队列从start到end之间的元素信息。
    30.【 ltrim key start end 】 截取一个队列,只保留指定区间内的元素。

    三:redis无序集合set类型命令
    31.【 sadd key vaule 】 往集合中插入一个元素,如果value值已存在集合中,则返回0,不会被重复插入。
    32.【 sinter key1 key2 … keyN 】 取出n个key之间的交集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sinter key1 key2返回d,e。
    33.【 sunion key1 key2 … keyN 】 取出n个key之间的并集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sunion key1 key2返回a,b,c,d,e,f。
    34.【 sdiff key1 key2 】 取出n个key之间的差集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sdiff key1 key2返回a,b,c;反过来sdiff key2 key1返回f。
    35.【 smembers key 】 返回key集合中所有的元素,结果是无序的。
    36.【 sismember key value 】 查看value这个值是否在key集合中。存在返回1,不存在返回0。
    37.【 scard key 】 返回集合中有多少个元素。
    38.【 smove key1 key2 value 】 把value从key1中移到key2中去。
    39.【 srem key value1 value2 … valueN 】 从key集合中删掉某些元素。

    四:redis有序集合sorted set命令
    40.【 zadd key v k 】 往key中添加一个元素,k为键,v为值。如:zadd artHits 99 12表示id为12的文章点击量为99次。
    41.【 zrange key start end 】 根据v的值由小到大进行排序来获得start到end之间的元素。
    注:0表示第一个元素,-1表示最后一个元素,-2表示倒数第二个元素,以此类推,如果要获取第一个到倒数第三个之间的元素,命令为:zrange key 0 -3。
    42.【 zrevrange key start end 】 同上,根据v的值由大到小进行排序来获得start到end之间的元素。可以轻松取出点击量最高的前n篇文章。
    43.【 zremrangebyrank key start end 】 删除集合中的元素。排序的方式为按照v由小到大的顺序,如果要删除key集合中的第一个值,则运行 zremrangebyrank artHits 0 0;删除前3个值:zremrangebyrank artHits 0 2。
    44.【 zcard 】 返回key集合中元素的个数。
    45.【 zrank key k 】 返回值k在集合key中排第几位,是按照v由小到大的顺序。排第一名返回0,第二返回1,以此类推。
    46.【 zrevrank key k 】 同上,不同的是,按照v由大到小的顺序。可以轻松取出点击量最高的文章。
    47.【 zscore key k 】 取出集合key中键为k对应的值v。
    48.【 zrem key k 】 删除集合中指定元素。
    49.【 zincrby key num k 】 给集合key中的元素k加上num,值针对整型。比如 zincrby artHits 3 12,给id为12的文章加上3个点击量。此时zscore artHits 12的结果是99+3为102。

    五:redis哈希hash类型命令
    50.【 hset key field value 】 设置hash field为指定值,如果key不存在,则先创建。
    51.【 hmset key field1 value1 … fieldN valueN 】 同时设置多个值。
    52.【 hget key field 】 获取指定的hash field
    53.【 hmget key field1 field1 … fieldN 】 获取指定的多个hash field
    54.【 hincrby key field num 】 将指定的hash field加上指定的值。
    55.【 hexists key field 】 查看指定field是否存在。
    56.【 hdel key field 】 删除指定的hash field。
    57.【 hlen key 】 返回指定hash中field的数量。
    58.【 hkeys key 】 返回hash所有的field。
    59.【 hvals 】 返回hash中所有的value。
    60.【 hgetall key 】 返回hash中所有的field和value。

    【聊聊redis持久化 - 两种方式】
    redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
    RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
    AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
    其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
    如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。
    【聊聊redis持久化 - RDB】
    RDB方式,是将redis某一时刻的数据持久化到磁盘中,是一种快照式的持久化方法。
    redis在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件。正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的。
    对于RDB方式,redis会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何IO操作的,这样就确保了redis极高的性能。
    如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。
    虽然RDB有不少优点,但它的缺点也是不容忽视的。如果你对数据的完整性非常敏感,那么RDB方式就不太适合你,因为即使你每5分钟都持久化一次,当redis故障时,仍然会有近5分钟的数据丢失。所以,redis还提供了另一种持久化方式,那就是AOF。
    【聊聊redis持久化 - AOF】
    AOF,英文是Append Only File,即只允许追加不允许改写的文件。
    如前面介绍的,AOF方式是将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍,就这么简单。
    我们通过配置redis.conf中的appendonly yes就可以打开AOF功能。如果有写操作(如SET等),redis就会被追加到AOF文件的末尾。
    默认的AOF持久化策略是每秒钟fsync一次(fsync是指把缓存中的写指令记录到磁盘中),因为在这种情况下,redis仍然可以保持很好的处理性能,即使redis故障,也只会丢失最近1秒钟的数据。
    如果在追加日志时,恰好遇到磁盘空间满、inode满或断电等情况导致日志写入不完整,也没有关系,redis提供了redis-check-aof工具,可以用来进行日志修复。
    因为采用了追加方式,如果不做任何处理的话,AOF文件会变得越来越大,为此,redis提供了AOF文件重写(rewrite)机制,即当AOF文件的大小超过所设定的阈值时,redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。举个例子或许更形象,假如我们调用了100次INCR指令,在AOF文件中就要存储100条指令,但这明显是很低效的,完全可以把这100条指令合并成一条SET指令,这就是重写机制的原理。
    在进行AOF重写时,仍然是采用先写临时文件,全部完成后再替换的流程,所以断电、磁盘满等问题都不会影响AOF文件的可用性,这点大家可以放心。
    AOF方式的另一个好处,我们通过一个”场景再现”来说明。某同学在操作redis时,不小心执行了FLUSHALL,导致redis内存中的数据全部被清空了,这是很悲剧的事情。不过这也不是世界末日,只要redis配置了AOF持久化方式,且AOF文件还没有被重写(rewrite),我们就可以用最快的速度暂停redis并编辑AOF文件,将最后一行的FLUSHALL命令删除,然后重启redis,就可以恢复redis的所有数据到FLUSHALL之前的状态了。是不是很神奇,这就是AOF持久化方式的好处之一。但是如果AOF文件已经被重写了,那就无法通过这种方法来恢复数据了。
    虽然优点多多,但AOF方式也同样存在缺陷,比如在同样数据规模的情况下,AOF文件要比RDB文件的体积大。而且,AOF方式的恢复速度也要慢于RDB方式。
    如果你直接执行BGREWRITEAOF命令,那么redis会生成一个全新的AOF文件,其中便包括了可以恢复现有数据的最少的命令集。
    如果运气比较差,AOF文件出现了被写坏的情况,也不必过分担忧,redis并不会贸然加载这个有问题的AOF文件,而是报错退出。这时可以通过以下步骤来修复出错的文件:
    1.备份被写坏的AOF文件
    2.运行redis-check-aof -fix进行修复
    3.用diff -u来看下两个文件的差异,确认问题点
    4.重启redis,加载修复后的AOF文件