Redis与数据结构

redis底层运用了大量的数据结构,让我们来看看它底层的数据结构及编码方式
Redis与数据结构_第1张图片
Redis与数据结构_第2张图片
ziplist:压缩列表
数据量大的时候节省空间

redis单线程:同一时间只有一条命令得到执行
redis单线程快的原因:
1.纯内存
2.非阻塞IO
3. 避免线程切换和竞态消耗
注意点:拒绝长慢命令,其实不是真正的单线程

1.字符串:
value可以存储json数据,value的大小不能超过512MB,一般来说100K左右就足够了
应用:缓存,计数器,分布式锁
命令:get,set,del
incr key #key自增1,如果key不存在,自增后get(key)=1
decr key #key自减1,如果key不存在,自减后get(key)=-1
incrby key k #key自增k,如果key不存在,自增后get(key)=k
decr key k #与上一条相反
实例:视频播放量统计
Redis与数据结构_第3张图片

set key value #不管key是否存在,都设置
setnx key value #key不存在,才设置
set key value xx #key存在,才设置(更新)
mget,mset批量操作
getset key newvalue #设置新的并返回旧的value
append key value #在原有value后执行追加操作
strlen key #返回字符串长度
incrbyfloat key k #浮点数自增操作
getrange key start end #返回指定下标的所有值
setrange key index value #设置指定下标所有对应的值
Redis与数据结构_第4张图片

2.hash:
key field(不能相同) value(可以相同)
API如下:和string方法类似
hget,hset,hdel,hgetall
hexists,hlen,hmget,hmset
hvals key,hkeys key
实例:记录网站访问量,hincrby key field count
存储视频信息:
Redis与数据结构_第5张图片

hash其实就像小的redis
Redis与数据结构_第6张图片

3.list列表:
有序可重复
API:
rpush key value1 value2…
lpush key value1 value2…
linsert key before|after value newValue
lpop key
rpop key
Redis与数据结构_第7张图片
ltrim key start end
lrange key start end(包含end)
lindex key index
llen
lset
blpop key timeout
brpop key timeout,timeout=0时为永远不阻塞
LRUSH+LPOP = Stack
LPUSH+RPOP = Queue
LPUSH+LTRIM = Capped Collection
LPUSH+BRPOP=Message Queue

3.set:
无序不重复
sinter,sdiff,sunion
sadd,srem
scard,sismember,srandmember,smembers

zset:
有序不重复
zadd,zrem,zscore,zincrby,zcard,zrank,zrange,zcount
实例:排行榜
Redis与数据结构_第8张图片

你可能感兴趣的:(redis数据库总结)