应用场景
服务器命令:
1.单值缓存
存储key,value :SET key value
2.对象缓存
存储key,value :SET key value(json 格式数据)
3.分布式锁
底层结构
我们可以通过命令查看 value值为string类型的编码
指向对象的底层实现数据结构,⽽这些数据结构由 encoding 属性决定。通过 encoding 属性来设定对象所使⽤的编码,⽽不是为特定类型的对象关联⼀种固定的编码,极⼤地提升了Redis的灵活性和效率,因为Redis可以根据不同的使⽤场景来
为⼀个对象设置不同的编码,从⽽优化对象在某⼀场景下的效率
String类型
由此我们可以了解
Value为String类型的值可以存储 Long 类型与字符串。
重点分享存储embstr 编码的动态字符串与 raw编码的 简单动态字符串
Redis小于等于44个字节的字符串是embstr编码、大于44个字节是raw编码
embstr编码与raw编码的区别
图片:
先说一下区别,embstr和raw都是用来存储string数据的,并且都是使用SDS(简单动态字符串(Simple Dynamic String))来存储,区别在于embstr是一块连续的内存,而raw是两个不连续的内存,因为raw是用来存长字符串的,所以SDS相对来说占用内存较大,而申请一块连续较大的内存是得不偿失的,embstr存数据时是只读的,如果需要改变embstr存储的value时,redis底层会将string的存储方式由embstr转换为raw,然后再去修改其value。embstr相对raw的优势在于申请内存和释放内存时只需要一次,而raw申请/释放两块不连续的内存需要两次,在效率上,embstr肯定是高于raw的。
Redis中的SDS与RedisObject的关系
知识普及
分布式锁:
控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。
string类型的value扩容机制:
● 当存储的 字符串⼤⼩ <= 1M 的时候,都是翻倍扩容。
● 如果存储的 字符串⼤⼩ > 1M 的时候,则每次只扩容1M空间。
● 字符串最⼤不能超过 512M 。