【Redis系列】:读懂redis这一篇就够了!


     相信我,读下去,没有收获你拿刀来砍我!

在这里插入图片描述

前言

     首先科普一下CPU缓存,CPU缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。缓存的工作原理是当CPU要读取一个数据的时候,首先在CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
在这里插入图片描述
     为什么要引入CPU缓存?在解释之前必须先了解程序的执行过程,首先从硬盘执行程序,存放到内存,再给cpu运算与执行。由于内存和硬盘的速度相比cpu实在慢太多了,每执行一个程序cpu都要等待内存和硬盘,引入缓存技术便是为了解决此矛盾,缓存与cpu速度一致,cpu从缓存读取数据比cpu在内存上读取快得多,从而提升系统性能。目前主流级CPU都有一级和二级缓存,高端些的甚至有三级缓存;
在这里插入图片描述
     上面讲述的是CPU缓存,让你读起下面的文章来好有个药引子,如果读不懂没太大问题,继续向下读 。
     重点来了! 在开发中我们常常提到的缓存和上面的CPU缓存有异曲同工之妙,但是并不等同于CPU缓存,我们写服务器程序时,使用缓存的目的无非就是减少数据库访问次数降低数据库的压力和提升程序的响应时间, 然而根据具体的使用场景又可以派生出无数种情况:

  • 比如说程序频繁读取数据库, 但是查询获得的结果却总是相同的,这部分相同的结果是不是可以放入缓存 ?
  • 获得查询结果要进行复杂的运算,非常消耗时间, 运算结果是不是可以放入缓存 ?
  • 有一些在网站每个页面都需要使用的数据, 比如说用户数据, 是不是可以放入缓存 ?
    在这里插入图片描述
          缓存有很多实现方式,谷歌的guava包的Cache、分布式缓存redis,memcached、EHcache、自定义缓存(例如使用静态Map实现)等。下面我们来讲解最常用的redis,会有一些简单的操作,还没有下载,不会?别慌,点击http://download.redis.io/releases/下载,下载完成之后的步骤请移步我的redis教程系列;

Redis数据类型和内存原理

      redis是一个基于C语言实现的高性能的key-value存储系统,运行在内存中但是可以持久化到硬盘上,有着多样的数据结构string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合),还有一些高级数据结构HyperLogLog、Geo、Pub/Sub。每种类型的存储在底层都会存在不同的编码格式(redisObject、SDS等)。

Redis到底强在哪里?

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 支持AOF和RDB持久化操作,数据备份;
  • 丰富的特性 – Redis还支持pub/sub, 通知, key 过期等等特性。
    数据类型简介

String(字符串)
      Redis字符串是字节序列。Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你可以存储任何东西,512M为上限;
示例:
redis 127.0.0.1:6379> SET name kevinOKredis 127.0.0.1:6379> GET name"kevin"

  • set key name存储一个字符串对象value

Hash(hash表)

      Redis的哈希是键值对的集合。 Redis的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象。
在这里插入图片描述
示例:
redis 127.0.0.1:6379> HSET key field valueOKredis 127.0.0.1:6379> HGET key fieldvalue

  • hset 存储一个哈希键值对的集合(hset key field value)
  • hget 获取一个哈希键的值(hget key field)

      xiaoming是对于redis的存储识别Hash的,而Hash真正存储的是key(year、score),value(18、99)。

List(链表)

      Redis的链表是简单的字符串列表,排序插入顺序。可以添加元素到Redis的列表的头部或尾部,允许添加重复元素;
在这里插入图片描述
示例:
在这里插入图片描述

  • lpop key 从左边移出一个元素,rpop key 从右边移出一个元素
  • len key 返回链表中元素的个数 相当于关系型数据库中 select count(*)
  • lrange key start end lrange命令将返回索引从start到stop之间的所有元素。Redis的列表起始索引为0。

Set(集合)

      Redis的集合是字符串的无序集合,不允许有重复。
在这里插入图片描述
示例:
在这里插入图片描述

  • sadd key value 添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0;
  • smembers key 返回key对应set的所有元素,结果是无序的;

SortedSet(有序集合)zset

     Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值