Data types and application scenarios of redis

1. Common data types and application scenarios

Redis是一个Key-Value的存储系统,使用ANSI C语言编写。

key的类型是字符串。value的数据类型有:

常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型。
不常见的:bitmap位图类型、geo地理位置类型。
Redis5.0新增一种:stream类型
注意:Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)
1.String类型
Redis的String能表达3种值的类型:字符串、整数、浮点数 100.01 是个六位的串

1.1常用操作
命令名称                           	命令描述
set set key value                    赋值
get get key                          取值
getset getset key value            取值并赋值
setnx setnx key value          当value不存在时采用赋值
set key value NX PX 3000        原子操作,px 设置毫秒数
append append key value             向尾部追加值
strlen strlen key                  获取字符串长度
incr incr key                        递增数字
incrby incrby key increment        增加指定的整数
decr decr key                         递减数字
decrby decrby key decrement        减少指定的整数

1.2应用场景
 - 1、key和命令是字符串 
 - 2、普通的赋值 
 - 3、incr用于乐观锁 incr:递增数字,可用于实现乐观锁 watch(事务)
 - 4、setnx用于分布式锁 当value不存在时采用赋值,可用于实现分布式锁
2.List表
list列表类型可以存储有序、可重复的元素
获取头部或尾部附近的记录是极快的
list的元素个数最多为2^32-1个(40亿)

2.1常用操作如下图所示
Insert picture description here
2.2应用场景
 - 作为队列使用(先进先出)或者作为栈使用(先进后出)
	列表有序可以作为栈和队列使用
 - 可用于各种列表,比如用户列表、商品列表、评论列表等

3.Hash类型(散列表)
Insert picture description here
3.1常用操作
命令名称                           命令格式                               描述
hset                       hset key field value                    赋值,不区别新增或修改
hmset                     hmset key field1 value1 field2 value2        批量赋值
hsetnx                      hsetnx key field value               赋值,如果filed存在则不操作
hexists                      hexists key filed                   查看某个field是否存在
hget                         hget key field                       获取一个字段值
hmget                       hmget key field1 field2 ...              获取多个字段值
hgetall                         hgetall key
hdel                         hdel key field1 field2...              删除指定字段
hincrby                   hincrby key field increment            指定字段自增increment
hlen                               hlen key                           获得字段数量

3.2应用场景
对象的存储 ,表数据的映射
4.set集合类型
无序、唯一元素,集合中最大的成员数为 2^32 - 1


4.1常用操作
命令名称           命令格式                      描述
sadd            sadd key mem1 mem2....    为集合添加新成员
srem            srem key mem1 mem2....    删除集合中指定成员
smembers        smembers key              获得集合中所有元素
spop             spop key             返回集合中一个随机元素,并将该元素删除
srandmember     srandmember key        返回集合中一个随机元素,不会删除该元素
scard             scard key               获得集合中元素的数量
sismember       sismember key member       判断元素是否在集合内
sinter          sinter key1 key2 key3       求多集合的交集
sdiff           sdiff key1 key2 key3          求多集合的差集
sunion           sunion key1 key2 key3       求多集合的并集

4.2 应用场景
适用于不能重复的且不需要顺序的数据结构
比如:关注的用户,还可以通过spop进行随机抽奖
5.Sortedset有序集合类型
SortedSet(ZSet) 有序集合: 元素本身是无序不重复的
每个元素关联一个分数(score),可按分数排序,分数可重复

5.1常用操作
命令名称                     命令格式                                描述
zadd         zadd key score1 member1 score2member2 ...      为有序集合添加新成员
zrem             zrem key mem1 mem2 ....                   删除有序集合中指定成员
zcard                   zcard key                         获得有序集合中的元素数量
zcount              zcount key min max             返回集合中score值在[min,max]区间的元素数量
zincrby           zincrby key increment member           在集合的member分值上加increment
zscore               zscore key member                      获得集合中member的分值
zrank                  zrank key member           获得集合中member的排名(按分值从小到大)
zrevrank              zrevrank key member             获得集合中member的排名(按分值从大到小)
zrange               zrange key start end              获得集合中指定区间成员,按分数递增排序
zrevrange            zrevrange key start end             获得集合中指定区间成员,按分数递减排序

5.2应用场景
由于可以按照分值排序,所以适用于各种排行榜。比如:点击排行榜、销量排行榜、关注排行榜等。