1. key相关的命令
- del key:删除key
- dump key:序列化key,并返回序列化后的值
- exists key:检查key是否存在
- expire key seconds:设置过期时间
- expireat key timestamp:用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)
- pexpire key millseconds:设置key的过期时间,以毫秒为单位
- pexpireat key milliseconds-timestamp:设置key过期时间的时间戳,以毫秒为单位
- keys pattern:查找所有符合给定模式的key
- move key db:将当前库的key挪到另外一个key
- persist key:移除key的过期时间,key将永久保存
- pttl key:以毫秒为单位返回key的剩余过期时间
- ttl key:以秒为单位返回key的过期时间;ttl:time to live
- randomkey:从当前数据库中随机返回一个key
- rename key newkey:给key改名字
- renamenx key newkey:仅当newkey不存在时,将key改名
- type key:返回key所存储的值的类型
- 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相关命令
- set key value
- get key
- getrange key start end:获取key中字符串值的子字符串
- getset key value:将给定key的值设为value,并返回旧的值
- getbit key offset:对 key 所储存的字符串值,获取指定偏移量上的位(bit)
- setbit key offset value:对key所存储的字符串值,设置或清除指定偏移量上的位bit
- mset key1 value1 key2 value2:设置多个key
- msetnx key1 value1 key2 value2:当且仅当所有key都不存在时才会操作
- mget key1 key2:获取多个value
- setex key seconds value:设置值同时设置存活时间,秒为单位
- psetex key seconds value:设置值同时设置存活时间,毫秒为单位
- setnx key value:只有在key不存在时设置key的值,如果原本存在这个key,那么不操作
- setrange key offset value:用value参数覆写原本的value,从偏移量开始覆盖
- strlen key:获取value的长度
- incr key:自增;decr key:自减
- incrby key increment:自增多少;decrby key decrement:自减多少
- incrbyfloat key increment:增加给定的浮点数;decrbyfloat…
- append key value:在原本的value后拼一个value
4. Hash相关命令
- hdel key field1 field2::删除key中的字段
- hexist key field:指定key中是否有该字段
- hget key field:获取key中指定字段的值
- hgetall key:获取key中所有的字段和值
- hincrby key field increment:自增key中的field的值,增加整数
- hincrbyfloat key field increment:自增key中field的值,增加小数
- hkeys key:获取key中所有的field
- hlen key:获取key中字段的数量
- hmget key field1 field2:获取多个key的field的值
- hmset key field1 value1 field2 value2:设置多个field的值
- hset key field value:设置单个字段和值
- hsetnx key field value:如果不存在才设置,存在就不操作
- hvals key:获取key中的所有的值
- hscan key cursor [match pattern] [count count]:迭代key中的键值对
5. List相关命令
- blpop key1 key2 timeout:移除并获取列表的第一个元素;如果列表是空的就阻塞到列表中有元素或者是等待超时
- brpop key1 key2 timeout:移除并获取列表的最后一个元素;如果列表是空的就阻塞队列直到有元素或者等待超时
- lpop key:移除并获取列表的第一个元素
- rpop key:移除并获取列表的最后一个元素
- brpoplpush source destination timeout:弹出原列表的最后一个添加到另外一个的头部,如果源列表是空的就阻塞知道列表有元素或者等待超时
- lindex key index:通过索引获取key中的元素
- linsert key before|after pivot value:在列表的元素前或者后插入元素
- llen key:获取列表的长度
- lpush key value1 value2:从列表左侧头部插入数据
- lpushx key value:将元素插入到存在的列表的头部,如果不存在不操作
- lrange key start stop:获取指定范围内的元素,start从0开始,stop输入-1,代表最后一个,-2代表倒数第二个
- lrem key count value:删除count个值为value的元素,删除当前列表中的count个value值,count > 0从左侧向右侧删除,count < 0从右侧向左侧删除,count == 0删除列表中全部的value
- lset key index value:设置key中指定索引处的value
- ltrim key start stop:从列表中截取一部分数据;保留你指定索引范围内的数据,超过这个索引范围被移除掉
- rpop key:移除列表的最后一个元素,返回值为移除的元素
- rpoplpush source destination:移除列表的最后一个元素,并将该元素添加到另一个列表并返回
- rpush key value1 value2:在列表中添加一个或多个值
- rpushx key value:为已存在的列表添加值
6. set集合相关命令
store:商店、仓库、存储处
destination:目的地、终点、目标
member:成员
- sadd key member1 member2:向集合中添加元素
- scard key:获取结合中元素的数量
- sdiff key1 key2:返回集合1和集合2之间的差异
- sdiffstore destination key1 key2:获取集合1与集合2的差异,并存储在destination中
- sinter key1 key2:返回集合1与集合2之间的交集
- sinterstore destination key1 key2:返回集合1与集合2之间的交集,并存储在destination中
- sismemeber key member:判断member是否是集合中的成员
- smembers key:返回集合中的所有的成员
- smove source destination member:将member元素从源移动到目标中
- spop key:移除并返回集合中的随机一个元素
- srandmember key [count]:返回集合中一个或多个随机数
- srem key member1 member2:从集合中移除成员1和成员2
- sunion key1 key2:获取集合1和集合2的并集
- sunionstore destination key1 key2:获取集合1和集合2的并集并存储到目标destination中
- 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,采用预分配冗余内存空间的方式来避免内存的频繁分配
常用场景:
- 可缓存结构体信息,可以存放字符,也可以存放jbp图片
- 虽然客户端是多线程的,但是redis内部是单线程也就是线程安全的,可以用incr或者decr来实现计数的功能
2. List类型
redis的列表的数据结构与Java中的LinkedList类似,前后插入或者删除数据非常快,但是随即定位数据可能会较慢
常用应用场景:
- list列表结构常用来做异步队列使用:将需要延后处理的任务结构体序列化成字符串后放入Redis的列表;另一个线程从Redis中获取这个列表的数据进行处理
- list列表可用于秒杀抢购场景:在商品秒杀中最怕的就是商品超卖,通常的解决方式是将库存商品存放到类似MQ的队列中,购买请求都是从队列中取,取完了就是卖完了;但是MQ的处理较为重量级,所以我们可以将商品信息存放到Redis的list队列中,因为pop的操作是原子性的,取完了再取就会抛出异常
3. Hash类型
redis的hash相当于HashMap,内部实现和HashMap一致,数据+链表的结构
应用场景:
- 保存结构体信息:hash字典类型也是比较适合保存结构体信息的e,不同于字符串一次序列化整个对象,hash可以存储用户结构中单个字段
4. Set类型
redis的set相当于jave中的HashSet,内部的键是无序唯一的
应用场景:
- 用在一些用来去重的场景:例如一个用户只能参加一次活动、一个用户只能中奖一次等等
5. Zset类型
Zset类似于java中的SortedSet和HashMap的结合体,一方面它可以保证每个元素的唯一性、另一方面可以给每个value都设置一个score代表这个元素的排序权重
应用场景:
- 各类热门排序场景:例如热门歌曲榜单列表,value值是歌曲ID,score是歌曲播放次数,这样即可对歌曲进行排序
还有类似微博粉丝列表、热门评论列表,value是粉丝ID、评论ID,score是关注时间、点赞数量