Redis支持多种数据结构,包括字符串、哈希表、链表、集合、有序集合、位图、Hyperloglogs等。
String
set/get
1、设置key对应的值为String类型的value
2、获取key对应的值
mget mget key1 key2
批量获取多个key的值,如果可以不存在则返回nil
incr &&incrby
incr对key对应的值进行加加操作,并返回新的值; ( incr key)
incrby加指定值 (incrby key value)
decr && decrby decr key decrby key指定value
decr对key对应的值进行减减操作,并返回新的值;decrby减指定值
setnx setnx key指定value 返回0 说明已经存在,set失败 ,1 说明不存在,set成功
设置key对应的值为String类型的value,如果key已经存在则返回0
setex setex key过期时间(s) 指定value 过期时间+1S后返回null
设置key对应的值为String类型的value,并设定有效期
其他命令
1、getrange 获取key对应value的子字符串
2、mset 批量设置多个key的值,如果成功表示所有值都被设置,否则返回0表示没有任何值被设置
3、msetnx,同mset,不存在就设置,不会覆盖已有的key
4、getset 设置key的值,并返回key旧的值
5、append:给指定key的value追加字符串,并返回新字符串的长度
Hash
Hash是一个String类型的field和value之间的映射表
redis的Hash数据类型的key(hash表名称)对应的value实际的内部存储结构为一个HashMap
Hash特别适合存储对象
相对于把一个对象的每个属性存储为String类型,将整个对象存储在Hash类型中会占用更少内存。
所存储的成员较少时数据存储为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
运用场景: 如用一个对象来存储用户信息,商品信息,订单信息等等。
Hash命令
1、hset——设置key对应的HashMap中的field的value
2、hget——获取key对应的HashMap中的field的value
3、hgetall——获取key对应的HashMap中的所有field的value
4、hlen--返回key对应的HashMap中的field的数量
List
1、lpush——在key对应的list的头部添加一个元素
2、lrange——获取key对应的list的指定下标范围的元素,-1表示获取所有元素
3、lpop——从key对应的list的尾部删除一个元素,并返回该元素
4、rpush——在key对应的list的尾部添加一个元素
5、rpop——从key对应的list的尾部删除一个元素,并返回该元素
Set 排重
1、sadd——在key对应的set中添加一个元素
2、smembers——获取key对应的set的所有元素
3、spop——随机返回并删除key对应的set中的一个元素
4、suion——求给定key对应的set并集
5、sinter——求给定key对应的set交集
SortSet 排序
1、zadd ——在key对应的zset中添加一个元素
zadd 集合名称 scroces值 元素 zadd myzset 1 "one"
2、zrange——获取key对应的zset中指定范围的元素,-1表示获取所有元素
zrange myzset 0 -1 zrange myzset 0 -1 withscroces
3、zrem——删除key对应的zset中的一个元素 zrem myzset one删除元素
4、zrangebyscore——返回有序集key中,指定分数范围的元素列表,排行榜中运用
5、zrank——返回key对应的zset中指定member的排名。其中member按score值递增(从小到大); 排名以0为底,也就是说,score值最小的成员排名为0,排行榜中运用
6、zcard ——返回元素数量
set是通过hashmap存储,key对应set的元素,value是空对象 sortset是怎么存储并实现排序的呢,hashmap存储,还加了一层跳跃表 跳跃表:相当于双向链表,在其基础上添加前往比当前元素大的跳转链接
各数据类型应用场景
String :计数
hash:保存对象信息,如单点登录,保存用户信息等
list:简单的消息队列,利用lrange命令,做基于Redis分页功能
set:存放不重复值的集合,可以全局去重;利用集合的交集,并集,差集,用于计算,如共同喜好等
sorted set:多了个权重参数 Score,集合中按Score进行排列,可以做排行榜,取Top N 操作。
也可用于延时任务。