Redis 了解

凡是学过计算机的,多多少少都听说过Redis,或许有的人也清楚它是一个数据库,但是和关系型数据库不一样,那么它究竟是什么呢?

Redis数据库文件

链接:https://pan.baidu.com/s/1jOHEca7Q8VjapRRdNFiXqg
提取码:q9pq

简介

非关系型数据库,NoSQL(No: Not Only):redis, mongodb, hbase…
存储key,value,可以理解为是一个很大的Map结构
如 name:zhangsan
age:23

  1. 数据之间没有关联关系
  2. 数据时存在内存里面的
    Redis可以用在查询一些不经常发生变化的数据
    NoSQL(NoSQL = Not Only SQL),即不仅仅是SQL,是一项全新的数据库理念,泛指非关系型数据库
    随着互联网web 2.0网站的兴起,传统的关系数据库在应对web 2.0 网站,特别是 超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,
    暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
    NoSQL数据库的产生就是为了解决大规模数据集合带来的挑战,尤其是大数据应用难题。
    web1.0用户只是访问,web2.0指纯动态的网站,以用户人为中心,用户可以发布自己的资源到网络上例如 抖音用户发布视频到抖音上,如果使用关系型数据库访问就比较慢

缓存思想

首先Redis中取出数据

  1. Redis中有:直接返回
  2. Redis中没有:
    1. 从数据库中查询
    2. 将数据放到Redis缓存中
    3. 返回数据
      请添加图片描述
      内存中缓存的选择有很多,可以使用Map集合,但是Map集合只能当前项目使用,但是要做分布式的部署有多台电脑的话Map集合就不适合了,毕竟两个Map之间传递数据不是特别方便,容易提高成本,使用非关系型数据库数据存储在内存中的而且可以部署独立机器

NOSQL和关系型数据库比较

优点:

  1. 成本:nosql数据库简单部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜
  2. 查询速度:nosql数据库将数据存放在缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql
  3. 存储数据格式:nosql的存储格式key,value形式,key是字符串,value支持很多格式,文档形式,图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型
  4. 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难.

缺点:

  1. 维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语
  2. 不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本(就是大家都是非关系型数据库,但是没有统一标准,在Redis中能够执行的命令在其他非关系型数据库中可能就不生效)
  3. 不提供关系型数据库对事物的处理

什么是Redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:

  1. 字符串类型 string
  2. 哈希类型 hash(java map)
  3. 列表类型 list
  4. 集合类型 set(无序不重复)
  5. 有序集合类型 sortedset(有序不重复)

Redis的数据结构

Redis存储的是:key,value格式的数据,其中key一定是字符串类型,而value有5中不同的数据结构
value的数据结构:

  1. 字符串类型 string
  2. 哈希类型 hash(map 格式)
  3. 列表类型 list : (LinkedList格式,支持重复元素)
  4. 集合类型 set:(不允许重复元素,且无顺序)
  5. 有序集合类型 sortedset (有序且不允许重复元素)
    请添加图片描述

详解命令

  1. 字符串类型
    请添加图片描述
  2. 哈希类型 hash : map
    在这里插入图片描述
  3. 列表类型 list
    可以添加元素到列表的头部(左边)或者尾部(右边),可以模拟一个队列的操作
    请添加图片描述
    获取:
    lrange key start end
    返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
    在这里插入图片描述
  4. 集合类型 set
    在这里插入图片描述
  5. 有序集合类型 sortedset
    在这里插入图片描述
    通用命令
    keys *:查询所有的键
    type key: 获取键对应的value的类型
    del key:删除指定的key value
    在这里插入图片描述

SpringBoot整个Redis:

添加依赖:

<!-- redis依赖包 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在application.properties中配置redis:

# 配置Redis
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379

RedisUtil工具类:


@Component
public class RedisUtil {
   
// @Autowired
//    private RedisTemplate<String, Object> redisTemplate;
   
   @Autowired
   private StringRedisTemplate redisTemplate;
   
   // Key(键),简单的key-value操作

   /**
    * 实现命令:DEL key,删除一个key
    *
    * @param key
    */
   public void del(String key) {
      redisTemplate.delete(key);
   }


   // String(字符串)


   /**
    * 实现命令:SET key value,设置一个key-value(将字符串值 value关联到 key)
    *
    * @param key
    * @param value
    */
   public void set(String key, String value) {
      redisTemplate.opsForValue().set(key, value);
   }


   /**
    * 实现命令:SET key value EX seconds,设置key-value和超时时间(秒)
    *
    * @param key
    * @param value
    * @param timeout
    *            (以秒为单位)
    */
   public void set(String key, String value, long timeout) {
      redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
   }


   /**
    * 实现命令:GET key,返回 key所关联的字符串值。
    *
    * @param key
    * @return value
    */
   public String get(String key) {
      return (String)redisTemplate.opsForValue().get(key);
   }

}
@SpringBootTest
public class RedisTest {


    @Autowired
    private RedisUtil redisUtil;


    @Test
    public void testSet() {
        redisUtil.set("address", "青岛");
    }


    @Test
    public void testGet() {
        String address = redisUtil.get("address");
        System.out.println(address);
    }
}











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值