Redis 基础

初识Redis

Redis 初步认识




一、Redis是什么?

Remote Dictionary Service 远程字典服务

二、基本特性

速度快
支持多种数据类型
支持多种编程语言
持久化、 内存淘汰
功能丰富: 事务、 发布订阅、 pipeline、 lua
集群、 分布式

三、基本命令

set key value(增/改)
get key(查)
keys *
dbsize
exists key
del key1 key2 删)
rename key1 key2
type key

四、基本类型

String、 Hash、 Set、 List、 Zset
Hyperloglog、 Geospatial 、 Streams

1 String

存储类型

1、 INT 整型
2、 Float 单精度浮点型
3、 String 字符串

操作命令

getrange key 0 1
strlen key
append key appendValue
setnx key
mset key1 value1 key2 value2
mget key1 key2
incr key
incrby key 100
decr key
decrby key 100
set mf 2.6
incrbyfloat mf 7.3

编码

1、 int, 存储8个字节的长整型(long, 2^63-1)
2、 embstr, embstr格式的SDS,存储小于44个字节的字符串
3、 raw, SDS, 存储大于44个字节的字符串

SDS
1、 内存空间预先分配
2、 获取字符长度的时间复杂度O(n)
3、 长度变更引起内存重新分配
4、 用’\0’判断字符串结束
为什么是44
struct SDS {
int8 capacity; // 1byte
int8 len; // 1byte
int8 flags; // 1byte
byte[] content; // 内联数组,长度为 capacity
}
这里unsigned int 变成了uint8_t、uint16_t.的形式,还加了一个char flags标识,总共只用了3个字节的大小。相当于优化了sds的内存使用,相应的用于存储字符串的内存就会变大。
然后进行计算:
64byte - 16byte -3byte -1byte = 44byte。

应用场景

1、 缓存
2、 分布式Session
3、 分布式锁 set NX EX
4、 分布式全局ID incr
5、 计数器 incr
6、 限流 incr
7、 位操作

2 Hash 哈希

hash与String

Hash特点:
1、 节省内存空间
2、 减少key冲突
3、 取值减少性能消耗
Hash不适合的场景:
1、 Field不能单独设置过期时间
2、 需要考虑数据量分布的问题

存储结构

ziplist: OBJ_ENCODING_ZIPLIST(压缩列表)
hashtable: OBJ_ENCODING_HT(哈希表)

应用场景

String能做的, Hash都可以做;
存储对象类型的数据

3 List 列表

存储原理quicklist

list-max-ziplist-size(fill)
list-compress-depth(compress)

应用场景

消息列表
文章列表
评论列表
公告列表
活动列表

4 set

储存结构

1、 intset
2、 hashtable

应用场景

1、 抽奖: spop myset
2、 点赞、 签到、 打卡(用户记录)
3、 商品标签、 用户画像(人口属性、 信用属性、 社交、 兴趣爱好…)
4、 用户关注、 推荐模型

5 zset 有序集合

储存结构

ziplist(元素数量<128, 所有元素长度小于64bytes)
skiplist + dict

应用场景

排行榜

6 其他

Hyperloglogs Geo Streams

7 对比

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值