Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件MQ, 它支持多种类型的数据结构。
1.String字符串类型
set key value :设置值; set a “123”
get key:获取值; get a “123”
del key:删除数据; del vv
EXISTS key:判断某一个key是否存在; EXISTS a
APPEND :追加字符串; APPEND a “hello” (integer) 8;追加字符串,如果当前key不存在,就相当于set key
STRLEN :获取字符串的长度; strlen a (integer) 8
incr是值自增,值+ 1; incr key
decr是值自减,值- 1; decr key
INCRBY/DECRBY 设置步长 i+=,指定增减量; INCRBY/DECRBY key 5;值增长/减少5次
GETRANGE :获取指定范围的字符串; getrange key 0 3:获取闭区间[0 3]的字符串,如果是获取闭区间[0,-1],当第二个参数设置为-1时,即截取全部字符串,与get key是一样效果。
SETRANGE:替换指定位置开始的字符串;SETRANGE key 1 xx
setex :设置key的过期时间
setnx :不存在再设置
Mset:批量设置值;mset k1 v1 k2 v2 k3 v3
Mget:批量获取值;mget k1 k2 k3
getset :获取旧值并设置新值;如果不存在值,则返回 nil
使用场景:
String类型作为数值时的增减;计数器;粉丝数;数据时效性设置;对象缓存存储;高热度数据访问加速
2.List
列表
在redis里面,我们可以把list当作栈、队列、阻塞队列。所有的list命令都是用 L 开头的,Redis不区分大小命令。
LPUSH:左边添加值
RPUSH是右边添加值
LRANGE是指定下标获取元素
LPOP:移除并返回最左边元素
RPOP:移除并返回最右边元素
Lindex :通过下标获取值
Llen :返回列表的长度
Lrem :移除指定的值,精确匹配
Ltrim :截取,通过下标截取指定的位置(闭区间)
Push: 移除原列表的最右边元素,并添加到新列表的最左边
Lset :更新当前下标的值,若当前列表不存在更新则会报错
Linsert: 将某个具体的value插入到列表中某个元素
使用场景:
1).List实际上是一个链表,before Node after , left,right 都可以插入值
2).如果key不存在,创建新的链表;如果key存在,新增内容
3).如果移除了所有值,则是空链表,说明不存在了
5).在两边插入或者改动值,效率最高;若是中间元素,相对来说效率会低一点
6).可以使用List实现消息排队、消息队列 (Lpush Rpop)、 栈( Lpush Lpop)
3.Set无序不重复
Sadd: 给set集合添加元素
SISMEMBER :判断某一个值是不是在set集合
scard :获取集合中的内容元素个数
srem :移除set集合中的指定元素
SRANDMEMBER :随机抽选出一个元素
Spop: 随机删除key
smove :将一个指定的值,移动到另外一个set集
使用场景:
例如微博,A用户将所有关注的人放在一个set集合中,将它的粉丝也放在一个set集合中。其中共同关注,共同爱好,二度好友,推荐好友等。
4.Hash哈希
Hset:设置值 Hget:获取值
Hmset:批量设置值 hmget:批量获取值
hgetall :获取全部的数据
hdel :删除hash指定key字段,对应的value值也就消失
hlen :获取hash表的字段数量
HEXISTS :判断hash中指定字段是否存在
Hkeys:只获得所有field,hvals只获得所有value
hincrby :设置增量,若是正数则增加,若是负数则减少
hsetnx :设置值时,若key已存在则失败返回0,不存在则成功返回1
使用场景:
h存储变更的数据,例如将user作为键,name age作为值进行存储,尤其是是用户信息之类的,经常变动的信息。hash 更适合于对象的存储,String更加适合字符串存储。
5.Zset有序集合:zset 即是对set排序
zadd :添加
zrange :查看
ZRANGEBYSCORE :实现升序
ZREVRANGEBYSCORE: 实现降序
zrem :移除
zcard :获取有序集合中元素的个数
zcount :获取集合中指定区间的元素个数
使用场景:
存储班级成绩表、工资表排序等,实现排行榜应用。