1. key相关的命令

  1. del key:删除key
  2. dump key:序列化key,并返回序列化后的值
  3. exists key:检查key是否存在
  4. expire key seconds:设置过期时间
  5. expireat key timestamp:用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)
  6. pexpire key millseconds:设置key的过期时间,以毫秒为单位
  7. pexpireat key milliseconds-timestamp:设置key过期时间的时间戳,以毫秒为单位
  8. keys pattern:查找所有符合给定模式的key
  9. move key db:将当前库的key挪到另外一个key
  10. persist key:移除key的过期时间,key将永久保存
  11. pttl key:以毫秒为单位返回key的剩余过期时间
  12. ttl key:以秒为单位返回key的过期时间;ttl:time to live
  13. randomkey:从当前数据库中随机返回一个key
  14. rename key newkey:给key改名字
  15. renamenx key newkey:仅当newkey不存在时,将key改名
  16. type key:返回key所存储的值的类型
  17. scan cursor [match pattern] [count count]:迭代数据库中的数据库键

2. 库的相关命令

#1. 清空当前所在的数据库
flushdb

#2. 清空全部数据库
flushall

#3. 查看当前数据库中有多少个key
dbsize

#4. 查看最后一次操作的时间   Lastsave 命令返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。
lastsave        返回   integer 值 

#5. 实时监控Redis服务接收到的命令   在一个连接上  使用 monitor 可以监控 别的连接对redis 的操作  
monitor

3. String相关命令

  1. set key value
  2. get key
  3. getrange key start end:获取key中字符串值的子字符串
  4. getset key value:将给定key的值设为value,并返回旧的值
  5. getbit key offset:对 key 所储存的字符串值,获取指定偏移量上的位(bit)
  6. setbit key offset value:对key所存储的字符串值,设置或清除指定偏移量上的位bit
  7. mset key1 value1 key2 value2:设置多个key
  8. msetnx key1 value1 key2 value2:当且仅当所有key都不存在时才会操作
  9. mget key1 key2:获取多个value
  10. setex key seconds value:设置值同时设置存活时间,秒为单位
  11. psetex key seconds value:设置值同时设置存活时间,毫秒为单位
  12. setnx key value:只有在key不存在时设置key的值,如果原本存在这个key,那么不操作
  13. setrange key offset value:用value参数覆写原本的value,从偏移量开始覆盖
  14. strlen key:获取value的长度
  15. incr key:自增;decr key:自减
  16. incrby key increment:自增多少;decrby key decrement:自减多少
  17. incrbyfloat key increment:增加给定的浮点数;decrbyfloat…
  18. append key value:在原本的value后拼一个value

4. Hash相关命令

  1. hdel key field1 field2::删除key中的字段
  2. hexist key field:指定key中是否有该字段
  3. hget key field:获取key中指定字段的值
  4. hgetall key:获取key中所有的字段和值
  5. hincrby key field increment:自增key中的field的值,增加整数
  6. hincrbyfloat key field increment:自增key中field的值,增加小数
  7. hkeys key:获取key中所有的field
  8. hlen key:获取key中字段的数量
  9. hmget key field1 field2:获取多个key的field的值
  10. hmset key field1 value1 field2 value2:设置多个field的值
  11. hset key field value:设置单个字段和值
  12. hsetnx key field value:如果不存在才设置,存在就不操作
  13. hvals key:获取key中的所有的值
  14. hscan key cursor [match pattern] [count count]:迭代key中的键值对

5. List相关命令

  1. blpop key1 key2 timeout:移除并获取列表的第一个元素;如果列表是空的就阻塞到列表中有元素或者是等待超时
  2. brpop key1 key2 timeout:移除并获取列表的最后一个元素;如果列表是空的就阻塞队列直到有元素或者等待超时
  3. lpop key:移除并获取列表的第一个元素
  4. rpop key:移除并获取列表的最后一个元素
  5. brpoplpush source destination timeout:弹出原列表的最后一个添加到另外一个的头部,如果源列表是空的就阻塞知道列表有元素或者等待超时
  6. lindex key index:通过索引获取key中的元素
  7. linsert key before|after pivot value:在列表的元素前或者后插入元素
  8. llen key:获取列表的长度
  9. lpush key value1 value2:从列表左侧头部插入数据
  10. lpushx key value:将元素插入到存在的列表的头部,如果不存在不操作
  11. lrange key start stop:获取指定范围内的元素,start从0开始,stop输入-1,代表最后一个,-2代表倒数第二个
  12. lrem key count value:删除count个值为value的元素,删除当前列表中的count个value值,count > 0从左侧向右侧删除,count < 0从右侧向左侧删除,count == 0删除列表中全部的value
  13. lset key index value:设置key中指定索引处的value
  14. ltrim key start stop:从列表中截取一部分数据;保留你指定索引范围内的数据,超过这个索引范围被移除掉
  15. rpop key:移除列表的最后一个元素,返回值为移除的元素
  16. rpoplpush source destination:移除列表的最后一个元素,并将该元素添加到另一个列表并返回
  17. rpush key value1 value2:在列表中添加一个或多个值
  18. rpushx key value:为已存在的列表添加值

6. set集合相关命令

store:商店、仓库、存储处

destination:目的地、终点、目标

member:成员

  1. sadd key member1 member2:向集合中添加元素
  2. scard key:获取结合中元素的数量
  3. sdiff key1 key2:返回集合1和集合2之间的差异
  4. sdiffstore destination key1 key2:获取集合1与集合2的差异,并存储在destination中
  5. sinter key1 key2:返回集合1与集合2之间的交集
  6. sinterstore destination key1 key2:返回集合1与集合2之间的交集,并存储在destination中
  7. sismemeber key member:判断member是否是集合中的成员
  8. smembers key:返回集合中的所有的成员
  9. smove source destination member:将member元素从源移动到目标中
  10. spop key:移除并返回集合中的随机一个元素
  11. srandmember key [count]:返回集合中一个或多个随机数
  12. srem key member1 member2:从集合中移除成员1和成员2
  13. sunion key1 key2:获取集合1和集合2的并集
  14. sunionstore destination key1 key2:获取集合1和集合2的并集并存储到目标destination中
  15. scan key cursor [match pattern] [count count]:迭代集合中的元素

7. zset有序集合相关命令

#1. 添加数据(score必须是数值。member不允许重复的。)
zadd key score member [score member ...]

#2. 修改member的分数(如果member是存在于key中的,正常增加分数,如果memeber不存在,这个命令就相当于zadd)
zincrby key increment member

#3. 查看指定的member的分数
zscore key member

#4. 获取zset中数据的数量
zcard key

#5. 根据score的范围查询member数量
zcount key min max

#6. 删除zset中的成员
zrem key member [member...]

#7. 根据分数从小到大排序,获取指定范围内的数据(withscores如果添加这个参数,那么会返回member对应的分数)
zrange key start stop [withscores]

#8. 根据分数从大到小排序,获取指定范围内的数据(withscores如果添加这个参数,那么会返回member对应的分数)
zrevrange key start stop [withscores]

#9. 根据分数的返回去获取member(withscores代表同时返回score,添加limit,就和MySQL中一样,如果不希望等于min或者max的值被查询出来可以采用 ‘(分数’ 相当于 < 但是不等于的方式,最大值和最小值使用+inf和-inf来标识)
zrangebyscore key min max [withscores] [limit offset count]

#   ZRANGEBYSCORE zset1 10 18 withscores limit 0 2    
取score  为  10 到  18 之间的 value(包含边界值10  和  18)  从 索引为 0 处开始取    取两个 


#   ZRANGEBYSCORE zset1 (10 (18 withscores limit 0 2 
取score  为  10 到  18 之间的 value(不包含边界值10  和  18)  从 索引为 0 处开始取    取两个

#  ZRANGEBYscore zset1 -inf +inf withscores limit 1  3
取 最小 score 到 最大score 的值   从 索引1  开始 取 ,取 3 个  


#10. 根据分数的返回去获取member(withscores代表同时返回score,添加limit,就和MySQL中一样)
#  返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。
#  成员按分数值递减的次序排列
zrevrangebyscore key max min [withscores] [limit offset count]     ?????

8. 总结

1. String类型

与java中String类型不同,Redis中字符串长度动态可变;数据结构内部实现类似于ArrayList,采用预分配冗余内存空间的方式来避免内存的频繁分配

常用场景:

  1. 可缓存结构体信息,可以存放字符,也可以存放jbp图片
  2. 虽然客户端是多线程的,但是redis内部是单线程也就是线程安全的,可以用incr或者decr来实现计数的功能

2. List类型

redis的列表的数据结构与Java中的LinkedList类似,前后插入或者删除数据非常快,但是随即定位数据可能会较慢

常用应用场景:

  1. list列表结构常用来做异步队列使用:将需要延后处理的任务结构体序列化成字符串后放入Redis的列表;另一个线程从Redis中获取这个列表的数据进行处理
  2. list列表可用于秒杀抢购场景:在商品秒杀中最怕的就是商品超卖,通常的解决方式是将库存商品存放到类似MQ的队列中,购买请求都是从队列中取,取完了就是卖完了;但是MQ的处理较为重量级,所以我们可以将商品信息存放到Redis的list队列中,因为pop的操作是原子性的,取完了再取就会抛出异常

3. Hash类型

redis的hash相当于HashMap,内部实现和HashMap一致,数据+链表的结构

应用场景:

  1. 保存结构体信息:hash字典类型也是比较适合保存结构体信息的e,不同于字符串一次序列化整个对象,hash可以存储用户结构中单个字段

4. Set类型

redis的set相当于jave中的HashSet,内部的键是无序唯一的

应用场景:

  1. 用在一些用来去重的场景:例如一个用户只能参加一次活动、一个用户只能中奖一次等等

5. Zset类型

Zset类似于java中的SortedSet和HashMap的结合体,一方面它可以保证每个元素的唯一性、另一方面可以给每个value都设置一个score代表这个元素的排序权重

应用场景:

  1. 各类热门排序场景:例如热门歌曲榜单列表,value值是歌曲ID,score是歌曲播放次数,这样即可对歌曲进行排序
    还有类似微博粉丝列表、热门评论列表,value是粉丝ID、评论ID,score是关注时间、点赞数量