一、Set数据类型相关操作
Redis 的 set 是 string 类型的无序集合。
(1)SADD:将一个或多个member元素加入到key中,已存在在集合的member将被忽略;假如key不存在,则只创建一个只包含member元素做成员的集合;当key不是集合类型时,将返回一个错误 。
格式:SADD key number [member ...]
(2)SCARD :返回key对应的集合中的元素数量。
格式:SCARD key
(3)SDIFF:返回一个集合的全部成员,该集合是第一个Key对应的集合和后面key对应的集合的差集
格式: SDIFF key [key ...]
(4)SDIFFSTORE:和SDIFF类似,但结果保存到destination集合而不是简单返回结果集;destination如果已存在,则覆盖
格式:SDIFFSTORE destionation key [key ...]
(5)SINTER:返回一个集合的全部成员,该集合是所有给定集合的交集;不存在的key被视为空集
格式:SINTER key [key ...]
(6)SINTERSTORE:和SINTER类似,但结果保存早destination集合而不是简单返回结果集;如果destination已存在,则覆盖;destination可以是key本身
格式:SINTERSTORE destination key [key ...]
(7)SISMEMBER:判断member元素是否key的成员,0表示不是,1表示是
格式:SISMEMBER key member
(8)SMEMBERS:返回集合key中的所有成员;不存在的key被视为空集
格式:SMEMBERS key
(9)SMOVE:原子性地将member元素从source集合移动到destination集合;source集合中不包含member元素,SMOVE命令不执行任何操作,仅返回0;destination中已包含member元素,SMOVE命令只是简单做source集合的member元素移除
格式: SMOVE source desination member
(10)SPOP:移除并返回集合中的一个随机元素,如果count不指定那么随机返回一个随机元素;count为正数且小于集合元素数量,那么返回一个count个元素的数组且数组中的元素各不相同;count为正数且大于等于集合元素数量,那么返回整个集合;count为负数那么命令返回一个数组,数组中的元素可能重复多次,数量为count的绝对值。
格式:SPOP key [count]
(11)SRANDMEMBER:如果count不指定,那么返回集合中的一个随机元素;count同上。
格式:SRANDMEMBER key [count]
(12)SREM:移除集合key中的一个或多个member元素,不存在的member将被忽略
格式:SREM key member [member ...]
(13)SUNION:返回一个集合的全部成员,该集合是所有给定集合的并集;不存在的key被视为空集
格式:SUNION key [key ...]
(14)SUNIONSTORE:类似SUNION,但结果保存到destination集合而不是简单返回结果集;destination已存在,覆盖旧值;destination可以是key本身。
格式:SUNIONSTORE destination key [key ...]
二、SortedSet数据结构相关操作
zset(sorted set 有序集合),和上面的set 数据类型一样,也是 string 类型元素的集合,但是它是有序的。
(1)ZADD:将一个或多个member元素及其score值加入有序集key中;如果member已经是有序集的成员,那么更新member对应的score并重新插入member保证member在正确的位置上;score可以是整数值或双精度浮点数。
格式:ZADD key score member [[score member] [score member] ...]
(2)ZCARD:返回有序集key的元素个数
格式:ZCARD key
(3)ZCOUNT :返回有序集key中,score值>=min且<=max的成员的数量
格式:ZCOUNT key min max
(4)ZRANGE :返回有序集key中指定区间内的成员,成员位置按score从小到大排序;具有相同score值的成员按字典序排列;需要成员按score从大到小排列,使用ZREVRANGE命令;下标参数start和stop都以0为底,也可以用负数,-1表示最后一个成员,-2表示倒数第二个成员;可通过WITHSCORES选项让成员和它的score值一并返回。
格式:ZRANGE key start stop [WITHSCORES]
(5)ZRANK:返回有序集key中成员member的排名,有序集成员按score值从小到大排列;排名以0为底,即score最小的成员排名为0;ZREVRANK命令可将成员按score值从大到小排名。
格式:ZRANK key number
(6)ZREM:移除有序集key中的一个或多个成员,不存在的成员将被忽略;当key存在但不是有序集时,返回错误 。
格式:ZREM key member [member ...]
(7)ZREMRANGEBYRANK:移除有序集key中指定排名区间内的所有成员
格式:ZREMRANGEBYRANK key start stop
(8)ZREMRANGEBYSCORE:移除有序集key中,所有score值>=min且<=max之间的成员
格式:ZREMRANGEBYSCORE key min max
三、Redis的Key相关操作
(1)DEL:删除给定的一个或多个key;不存在的Key将被忽略。
格式:DEL key [key ...]
(2)EXISTS:检查给定key是否存在
格式:EXISTS key
(3)EXPIRE:为给定key设置生存时间,key过期时它会被自动删除;对一个已经指定生存时间的Key设置执行EXPIRE,新的值会代替旧的值。
格式:EXPIRE key seconds
(4)EXPIREAT:同EXPIRE,但此命令指定的是UNIX时间戳,单位为秒
格式:EXPIRE key timestamp
(5)KEYS:查找所有符合给定模式pattern的key,下面举一下例子
- KEYS *匹配所有key
- KEYS h?llo匹配hello、hallo、hxllo等
- KEYS h*llo匹配hllo、heeeeello等
- KEYS h[ae]llo匹配hello和hallo
- 特殊符号想当做查找内容经的使用\
格式:KEYS pattern
这里特别注意KEYS命令,虽然KEYS命令速度非常快,但是当Redis中百万、千万甚至过亿数据的时候,扫描所有Redis的Key,速度仍然会下降,由于Redis是单线程模型,这将导致后面的命令阻塞直到KEYS命令执行完。因此当Redis中存储的数据达到了一定量级的时候,必须警惕KEYS造成Redis整体性能下降。
(6)MIGRATE :原子性地将key从当前实例传送到目标实例指定的数据库上;原数据库Key删除,新数据库Key增加;阻塞进行迁移的两个实例,直到迁移成功、迁移失败、等待超时三个之一发生。
格式:MIGRATE host port key destination-db timeout [COPY] [REPLACE]
[COPY] :不移除源实例上的 key
[REPLACE] :替换目标实例上已存在的 key
启动第二个redis
(7)MOVE:将当前数据库的key移动到给定数据库的db中;执行成功的条件为当前数据库有key,给定数据库没有key
格式:MOVE key db
(8)PERSIST:移除给定key的生存时间,将key变为持久的
格式:PERSIST key
(9)RANDOMKEY:从当前数据库随机返回且不删除一个key,
格式:RANDOMKEY
(10)RENAME:将key改名为newkey;当key和newkey相同或key不存在,报错;newkey已存在,RENAME将覆盖旧值。
格式:RENAME key newkey
(11)TTL:以秒为单位,返回给定的key剩余生存时间
格式:TTL key
(12)PTTL:以毫秒为单位,返回给定的key剩余生存时间
格式:PTTL key
(13)TYPE:返回key锁存储的值的类型
格式:TYPE key
四、各种数据类型所对应的应用场景
1.String类型的应用场景
String是最常用的一种数据类型,普通的key/value存储.
2.list类型的应用场景
比较适用于列表式存储且顺序相对比较固定,例如:
省份、城市列表
品牌、厂商、车系、车型等列表
拆车坊专题列表...
3.set类型的应用场景
Set对外提供的功能与list类似,当需要存储一个列表数据,又不希望出现重复数据时,可选用set
4.zset(sorted set)类型的应用场景
zset的使用场景与set类似,区别是set不是自动有序的,而zset可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序.当你需要一个有序的并且不重复的集合列表,那么可以选择zset数据结构。例如:
根据PV排序的热门车系车型列表
根据时间排序的新闻列表
5.hash类型的应用场景
类似于表记录的存储
页面视图所需数据的存储
如果本文对您有很大的帮助,还请点赞关注一下。