1、String
1.1、string
String类型是Redis中最为基础的数据存储类型,是一个由字节组成的序列,它在Redis中是二进制安全的,这便意味着该类型可以包含任何格式的数据,如JPEG图像数据或Json对象描述信息等。Value最多可以容纳的数据长度为512MB。
应用场景:很常见的场景用于统计网站访问数量,当前在线人数等。incr命令(++操作)
1.2、常用命令
set key value 设置key=value get key 获得键key对应的值 setnx(not exist) key value 如果key的value存在就不会被修改并且返回0 setex (expire) key seconds valeu 指定键的过期时间 setrange 替换字符串 mset key value [key value...] 设置多个键和多个值 mget key1 [key2..] 得到多个的给定键的值 strlen key 得到存储在键的值的长度 getset key value 设置键的字符串值,并返回旧值 incr key 增加键的整数值一次 decr key 递减键一次的整数值 incrby key [步长] 对某个值进行指定步长的递增 decrby key [步长] 对某个值进行指定步长的递增 append key value 追加值到一个键 del key 如果存在删除键 exists key 检查该键是否存在 expire key seconds 指定键的过期时间 persist key 移除过期的键 rename key newkey 更改键的名称 typekey 返回存储在键的数据类型的值
2、Hash
2.1、Hash
Redis Hash是一个string类型的field和value的映射表,或者说是一个String集合,Hash特别适合用于存储对象。相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存取整个对象。
应用场景:例如存储、读取、修改用户属性(name,age,pwd等)
2.2、常用命令
hset 给key集合中fileld属性设值 用法:hset key field value hget获取key集合中fileld属性的值 用法:hget key field hmset 一次赋值多个字段 用法:hmset key field1 value1 [field2 values] hmget 一次取多个字段的值 用法:hmget key field1 [field2] hexists 判断字段是否存在 用法:hexists key field hsetnx 当字段不存在时赋值 用法:hsetnx key field value hincrby 增加数字,仅对数字类型的值有用 用法:hincrby key field increment hdel 删除字段 用法:hdel key field hkeys 获取所有字段名 用法:hkeys key hvals 获取所有字段值 用法:hvals key hlen 获取字段数量 用法:hlen key hgetall 一次取所有字段的值 用法:hgetall key
3、List
3.1、List
redis的List类型是一个链表结构的集合。其主要功能是push和pop获取元素等,更详细的说,List类型是一个双端链表的结构,我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。
应用场景:1.最新消息排行榜。2.消息队列,以完成多程序之间的消息交换。可以用push操作将任务存在list中(生产者),然后线程再用pop操作将任务取出进行执行。(消费者)
3.2、常用命令
2、rpush 向列表右端添加元素(类似于队列),用法:rpush key value
3、lrange 获取列表中某一片段的元素(index从0开始,-1表示最后一个元素),用法:lrange key start stop
lpop 从列表左端弹出元素,并返回弹出元素的值 用法:lpop key rpop 从列表右端弹出元素,并返回弹出元素的值 用法:rpop key llen 获取列表中元素个数, 用法:llen key lrem 删除列表中指定的值, 用法:lrem key count value,删除列表中前count个值为value的元素,当count>0时从左边开始数,count<0时从右边开始数,count=0时会删除所有值为value的元素 lindex 获取指定索引的元素值, 用法:lindex key index lset 设置指定索引的元素值, 用法:lset key index value ltrim 只保留列表指定片段, 用法:ltrim key start stop,包含start和stop linsert 像列表中插入元素, 用法:linsert key before|after privot value,从左边开始寻找值为privot的第一个元素,然后根据第二个参数是before还是after决定在该元素的前面还是后面插入value rpoplpush 将元素从一个列表转义到另一个列表, 用法:rpoplpush source destination
4、Set
4.1、Set
Redis Set是String类型的无序不可重复的集合。集合最大的优势在于可以进行交集并集差集操作。
应用场景:1.利用交集求共同好友。2.利用唯一性,可以统计访问网站的所有独立IP。3.好友推荐的时候根据tag求交集,大于某个threshold(临界值的)就可以推荐。
4.2、常用命令
sadd 添加元素, 用法:sadd key value1 [value2 value3 ...] srem 删除元素, 用法:srem key value2 [value2 value3 ...] smembers 获得集合中所有元素, 用法:smembers key sismember 判断元素是否在集合中, 用法:sismember key value sdiff 对集合做差集运算, 用法:sdiff key1 key2 [key3 ...],先计算key1和key2的差集,然后再用结果与key3做差集 sinter 对集合做交集运算, 用法:sinter key1 key2 [key3 ...] sunion 对集合做并集运算, 用法:sunion key1 key2 [key3 ...] scard 获得集合中元素的个数, 用法:scard key sdiffstore 对集合做差集并将结果存储, 用法:sdiffstore destination key1 key2 [key3 ...] sinterstore 对集合做交集运算并将结果存储, 用法:sinterstore destination key1 key2 [key3 ...] sunionstore 对集合做并集运算并将结果存储, 用法:sunionstore destination key1 key2 [key3 ...] srandmember 随机获取集合中的元素, 用法:srandmember key [count],当count>0时,会随机中集合中获取count个不重复的元素,当count<0时,随机中集合中获取|count|和可能重复的元素。 spop 从集合中随机弹出一个元素, 用法:spop key1、sadd 添加元素,用法: saddkey value1 [value2 value3 ...]
2、sdiff 对集合做差集运算,用法: sdiff key1 key2
3、sinter 对集合做交集运算,用法:sinter key1 key2
4、sunion 对集合做并集运算,用法:sunion key1 key2
5、ZSet
5.1、ZSet
和set很像,都是字符串的集合,都不允许重复的成员出现在一个set中。他们之间差别在于ZSet集合中每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。尽管有序集合中的成员必须是唯一的,但是分数(score)却可以重复。
应用场景:可以用于一个大型在线游戏的积分排行榜,每当玩家的分数发生变化时,可以执行zadd更新玩家分数(score),此后在通过zrange获取几分top ten的用户信息。
5.2、常用命令
zadd 添加元素, 用法:zadd key score1 value1 [score2 value2 score3 value3 ...] zscore 获取元素的分数, 用法:zscore key value zrange 获取排名在某个范围的元素, 用法:zrange key start stop [withscore],按照元素从小到大的顺序排序,从0开始编号,包含start和stop对应的元素,withscore选项表示是否返回元素分数 zrevrange 获取排名在某个范围的元素, 用法:zrevrange key start stop [withscore],和上一个命令用法一样,只是这个倒序排序的。 zrangebyscore 获取指定分数范围内的元素, 用法:zrangebyscore key min max,包含min和max,(min表示不包含min),(max表示不包含max),(+inf表示无穷大) zincrby 增加某个元素的分数, 用法:zincrby key increment value zcard 获取集合中元素的个数, 用法:zcard key zcount 获取指定分数范围内的元素个数, 用法:zcount key min max,min和max的用法和zrangebyscore中的一样 zrem 删除一个或多个元素, 用法:zrem key value1 [value2 ...] zremrangebyrank 按照排名范围删除元素, 用法:zremrangebyrank key start stop zremrangebyscore 按照分数范围删除元素, 用法:zremrangebyscore key min max,min和max的用法和zrangebyscore中的一样 zrank 获取正序排序的元素的排名, 用法:zrank key value zrevrank 获取逆序排序的元素的排名, 用法:zrevrank key value zinterstore 计算ZSet的交集并存储结果, 用法:zinterstore destination numbers key1 key2 [key3 key4 ...] weights weight1 weight2 [weight3 weight4 ...] aggregate sum | min | max,numbers表示参加运算的集合个数,weight表示权重,aggregate表示结果取值 zunionstore 计算有序几个的并集并存储结果, 用法和zinterstore一样