redis存储图⽚_Redis缓存机制
Redis介绍
Redis是⼀款内存⾼速缓存数据库;
数据模型为:key - value,⾮关系型数据库使⽤的存储数据的格式;
可持久化:将内存数据在写⼊之后按照⼀定格式存储在磁盘⽂件中,宕机、断电后可以重启redis时读取磁盘中⽂件恢复缓存数据;
分布式:当前任务被多个节点切分处理,叫做分布式处理⼀个任务。单个服务器内存,磁盘空间有限,⽆法处理海量的缓存数据,必须⽀持分布式的结构;
nosql:not only structured query language 不仅仅结构化查询语⾔
  结构化数据:有规律的⼀类数据;例如:⼈的信息,动物信息,考试信息
  ⾮结构化数据:海量的不具备任何共同特性的数据集合;例如:⽹页,⽇志;图⽚
  关系型数据库:体现不同类结构化数据之间的关系的数据,例如ORACLE mysql
  ⾮关系型数据库:存储的是⾮结构化的海量数据;⽆法体现数据的关系;例如 mongoDB redis
Redis缓存
数据库缓存:
sql语句时key值,查询结果resultSet是value,当同⼀个查询语句访问时(select * from t_product),只要曾经查询过,调⽤缓存直接返回resultSet,节省了数据库读取磁盘数据的时间。
持久层缓存:
减少了连接数据库的时间;减少了resultSet封装成对象的过程。
业务层和控制层的缓存:
减少调⽤层次。
描述缓存在业务层的逻辑:
查询商品信息
判断当前查询在缓存是否有数据
  如果有数据,直接返回,当前请求结束;
  如果没有数据,查询持久层数据库数据,获取数据存储再缓存⼀份,供后续访问使⽤;
缓存雪崩/缓存击穿
海量请求访问服务器,服务器的性能由缓存⽀撑,⼀旦⼀定范围的缓存数据未命中,请求的数据访问涌⼊数据库;承受不了压⼒造成宕机--重启--海量请求并未消失--宕机--重启,系统长时间不可⽤;这种情况就是缓存的雪崩。
Redis五种数据结构和内部编码
Redis⽀持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
String(字符串)
string 是 redis 最基本的类型,你可以理解成与 Memcached ⼀模⼀样的类型,⼀个 key 对应⼀个 value。
string 类型是⼆进制安全的。意思是 redis 的 string 可以包含任何数据。⽐如jpg图⽚或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最⼤能存储 512MB。
实例:
127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> set name hanlaoshiOK127.0.0.1:6379> set location beijingOK127.0.0.1:6379> keys *1) "location"2) "nam
Hash(哈希)
Redis hash 是⼀个键值(key=>value)对集合。
Redis hash 是⼀个 string 类型的 field 和 value 的映射表,hash 特别适合⽤于存储对象。
实例:
redis> HMSET myhash field1 "Hello" field2 "World""OK"redis> HGET myhash field1"Hello"redis> HGET myhash field2"World"
List(列表)
Redis 列表是简单的字符串列表,按照插⼊顺序排序。你可以添加⼀个元素到列表的头部(左边)或者尾部(右边)。
127.0.0.1:6379> lpush mylist01 100 200 300(integer) 3127.0.0.1:6379> lrange mylist01 0 11) "300"2) "200"
Set(集合)
Redis的Set是string类型的⽆序集合。
集合是通过哈希表实现的,所以添加,删除,查的复杂度都是O(1)。
sadd 命令
添加⼀个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
实例:
redis 127.0.0.1:6379> sadd runoob redis(integer) 1redis 127.0.0.1:6379> sadd runoob mongodb(integer) 1redis 127.0.0.1:6379> sadd runoob rabitmq(int
注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯⼀性,第⼆次插⼊的元素将被忽略。
集合中最⼤的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
zset(sorted set:有序集合)
Redis zset 和 set ⼀样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联⼀个double类型的分数。redis正是通过分数来为集合中的成员进⾏从⼩到⼤的排序。
zset的成员是唯⼀的,但分数(score)却可以重复。
zadd 命令
redis支持的数据结构
添加元素到集合,元素在集合中存在则更新对应score
实例:
redis 127.0.0.1:6379> zadd runoob 0 redis(integer) 1redis 127.0.0.1:6379> zadd runoob 0 mongodb(integer) 1redis 127.0.0.1:6379> zadd runoob 0 rabitm
内部编码
实际上每种数据结构都有⾃⼰底层的内部编码实现,⽽且是多种实现,这样Redis会在合适的场景选择合适的内部编码。
可以看到每种数据结构都有两种以上的内部编码实现,例如string数据结构就包含了raw、int和embstr三种内部编码。
同时,有些内部编码可以作为多种外部数据结构的内部实现,例如ziplist就是hash、list和zset共有的内部编码。
我们可以通过object encoding命令查询内部编码:
127.0.0.1:6379> set set:1 helloOK127.0.0.1:6379> object encoding set:1"embstr"127.0.0.1:6379> hset user:1 name kebi(integer) 1127.0.0.1:6379> object

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。