Redis命令详解以及存储原理

Redis是什么

  • 远程字典服务
    • 分布式场景重的一个单独的节点。
    • 请求回应的模式:发起请求,处理之后得到回应的结果。
    • 字典的形式存储&索引数据。
  • 内存数据库
    • 数据在内存中,不可以出现需要的内存不在内存中而在磁盘中
    • 速度快,内存100ns,磁盘一次IO10ms
  • kv数据库
    • 关系型数据库:b+树索引
    • kv数据库:通过key索引数据
  • 数据结构数据库
    • string:字节串(不是以\0作为分隔符,是用长度描述的)
    • list:链表
    • hash:
    • zset:有序集合(member确定唯一,score确定有序)
    • set:集合
    • stream:消息队列,通常用kafka
    • hyperloglog:基于统计的数据,概率型数据结构
    • 。。。

认识Redis

  • key:都是字节串,用户定义的名字。
  • value:使用什么命令决定。

安装编译

git clone https://github.com/redis/redis.git -b 6.2
cd redis
make -j32
sudo make install

启动

mkdir redis-server
cd redis-server
redis-server redis.conf
redis-cli
>auth [password]

Redis命令

set teacher king
# ok
keys *
#1) "teacher"
get teacher
# "king"
lpush teachers mark darren king
# (integer) 3
lrange teachers 0 -1
hset teacher:10001 name mark
hset teacher:10001 age 30
hset teacher:10001 sex 1
hgetall teacher:10001
sadd teacher:set mark king darren
smembers teacher:set
zadd teacher:rank 98 mark 99 darren 100 king
zrange teacher:rank 0 -1 withscores
zadd teacher:rank 101 mark

Redis存储结构

  • key通过哈希,生成一个64位的整数。Redis维护一个恰好大于n的2的n次幂的数组。对key取余,得到数组的索引值。kv对存储在索引下面,有多个的时候用链表链接。
  • list是一个双向循环链表
  • list,hash和zset可能会使用压缩列表,数据少的时候使用(7.0之后是listpack不记录最后偏移,时间复杂度差不多)
  • zset:跳表
  • set:整形数组,如果元素使整数,那就是整数有序数组
  • string:动态字节串
object encoding teacher # 查看value的类型
incr teacher
incr counter # 没有自动创建为0然后+1
incrby counter 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值