Redis家喻户晓的数据类型一文带走

119 阅读4分钟

5b6ac3067c2fa.jpg

Redis数据类型扫盲,常见的类型及使用场景介绍。了解常用的操作命令有助于帅气的你能够判断出在合适的场景中使用哪种合适的命令,没有最好只有最合适❤️

String(单值单value)

  • String是redis最基本的数据类型,你可以理解成和Memcached一模一样的类型,一个key对应一个value
  • String类型是二进制安全的,意思是redis的String可以包含任何数据,比如jpg图片或者序列化的对象
  • String类型是redis最基本的数据类型,一个redis中字符串value最多可以是512M
//获取某个key
get key

//设置某个key
set key

//向value的末尾添加字符串,返回元素的长度
append key value

//获取元素的长度
strlen key

incr key 将key加一(一定要是数字才能进行加减)

线程安全的将一个数字加一,适合应用在投票,点击量之类计数的场景

image.png

decr key 将key减一

image.png

incrby key increment 将key加increment

image.png

decrby key increment 将key减increment

image.png

getrange/setrange(范围内取值/范围内设置值 (左闭右闭))

image.png

image.png

setex(set with expire)设置带过期时间的key

image.png

setnx(set is not exist)如果这个key不存在的话就设置

基于redis的分布式锁可能会用到这个命令

image.png

mset/mget/msetnx 批量键值操作

image.png

getset(先get在set)

image.png

Hash 哈希,(kv模式不变,但v是一个键值对)类似java中的Map

  • redis hash 是一个键值对集合
  • redis hash 是一个string类型的key和value的映射表,hash特别适用于存储对象
  • 类似java里面的Map<String,Object>
//设置一个key中的一个字段
hset key field value

//获取一个key中的一个字段
hget key field

//批量设置key中的字段
hmset  key field value [field value ...]

//批量获取key中的字段
hmget key field [field ...]

//获取key中所有的字段
hgetall key

//删除key中的字段
hedel key field [field ...]

image.png

hlen key(这个key中有多少个键值对)

image.png

hexists key field(判断key中有没有指定的field)

image.png

hkeys key/kvals key(获取指定key里面的key/获取指定key里面的value)

image.png

hincrby/hincybyfloat 将一个key中的field增加指定数值

image.png

hsetnx key filed value(如果key中的filed不存在就设置进去)

image.png

List 列表(单值多value)

  • redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边) 或者尾部(右边),它的底层实际是个链表
  • left,right都可以添加
  • 如果key不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果key中的value全部移除,对应的key也就没有了
  • 链表的操作无论头和尾效率都极高,但假如是对中间元素进行操作,效率一般般
//左边插入
lpush key element [element ...]

//右边插入
rpush key element [element ...]

//获取元素
lrange  key start stop

image.png

lpop/rpop(头/尾 弹出元素)

image.png

lindex 按照索引下标获得元素(从上到下)

image.png

llen(长度)

image.png

lrem key count value(批量删除key中的count个value)

image.png

ltrim key start stop(截取key 从start到stop 左闭右闭 并重新赋值给key)

image.png

rpoplpush source destination(从源元素底部弹出一个元素放到目标元素头部上)

image.png

lset key index value(将索引上的值改成value)

image.png

linsert key BEFORE|AFTER pivot value(在指定值的前或后添加value)

image.png

Set 集合 (单值多value)

//添加元素
sadd key member [member ...]

//获取全部元素
smembers key

//判断指定value是否存在key中
sismember key member

image.png

scard key (获取集合里面的元素个数)

image.png

srem key value (删除集合中的指定value)

image.png

srandmember count(随机取出count个值)注意原始集合中的元素不变

image.png

spop key (随机出栈一个元素) 注意 弹出的元素不在原始集合中了

image.png

smove key1 key2 value(将key1里面的value移到keys中)

image.png

Zset 有序集合

  • redis zset 和 set一样也是string类型元素的集合,且不允许重复的成员
  • 不同的是每个元素都会关联一个double类型的分数
  • redis正是通过这个分数来为集合中的成员进行从小到大排序,zset的成员是唯一的,但分数(score)却可以重复

zadd:时间复杂度O(Mlog(N)) zrange

image.png

zrangebyscore key min max (按照排序的号来筛选)

image.png

zrangebyscore key min max limit 开始下标 多少步

image.png

zrem key value 删除某个value

image.png

zcard 获取个数

image.png

zcount key min max (获取一个区间的分数的数量)

image.png

zrank key value (拿到value的下角标)/zrevrank key value (逆序拿到下角标)

image.png

image.png

zscore key value(拿到指定key中的value的分数)

image.png

zrevrange key(倒叙显示所有的value)

image.png

到此Redis的经典五大数据类型已经介绍完毕了,bitmap,HyperLogLog,GEO,等的数据类型,我们下期再见🔥