微服务架构-Redis实战原理剖析-072:Redis环境搭建与数据结构原理

1 Redis高级内容课程内容介绍

Redis实战原理核心技术点内容:
1 Redis与其他缓存框架的对比
2 Redis环境安装linux/windows
3 Redis的数据类型与线程模型
4 Redis持久化的机制RDB和AOF
5 Redis队列的支持与事务
6 Redis缓存淘汰策略实现方案
7 Redis的高可用的机制
8 Redis应用场景与解决方案

课程内容:
1.Redis线程模型
2.Redis五种基本数据类型
3.Linux环境安装Redis
4.SpringBoot操作Redis实现对象操作

2 Redis分布式缓存与本地缓存

Redis缓存框架基本介绍
Redis 是完全开源免费的,是一个高性能的key-value数据库,目前市面上主流的数据库
Redis、Memcache、Tair(淘宝自研发)
Redis的官网:https://redis.io/

内存数据库(nosql数据库)、mysql、sqlserver
关系数据库存放在硬盘中 每次查询实现io操作
非关系数据库 Redis 持久化机制、淘汰策略,支持分布式共享
Jvm内置缓存框架 EhCache、os cache

3 Redis的应用场景有那些

Redis的应用场景

  1. Token令牌的生成
  2. 短信验证码Code
  3. 实现缓存查询数据,减轻数据库访问压力
    Redis与mysql数据不一致问题
  4. 帮助实现计数器
  5. 分布式锁
  6. 延迟操作
    秒杀抢购 订单超时:30分钟内取消订单 库存+1
  7. 分布式消息中间件(发布订阅)

4 Redis线程模型IO多路复用

Redis官方是没有windows版本的redis,只有linux版本的。
为什么Redis只有linux版本没有windows版本?
Redis采用nio的io多路复用原则,也就是一个线程(单线程)维护多个不同的redis客户端连接,从而提高处理并发效率和保证线程安全问题,底层采用linux操作系统的epoll技术(事件回调)避免空轮询。

5 Redis前台启动环境安装

Linux环境下安装Redis

1 上传Redis的安装包 /usr
redis-5.0.6.tar.gz
2 解压我们的Redis安装包
tar -zxvf redis-5.0.6.tar.gz
3 mkdir /usr/redis
4 cd redis-5.0.6
make install PREFIX=/usr/redis
如报错gcc命令未找到
执行:yum -y install gcc automake autoconf libtool make
删除redis、redis-5.0.6目录重新执行以上234操作
5 启动Redis cd /usr/redis/bin     ./redis-server 

在这里插入图片描述

6 Redis设置允许外界访问

环境核心配置
将Redis设置为后台启动

cp /usr/redis-5.0.6/redis.conf /usr/redis/bin
cd /usr/redis/bin
vi redis.conf 修改daemonize yes
./redis-server ./redis.conf 重启启动Redis
ps aux | grep ‘redis’

设置Redis账号密码
vi redis.conf 修改# requirepass foobared
requirepass 123456
客户端连接:./redis-cli
auth 123456

设置Reids允许ip访问
关闭防火墙 systemctl stop firewalld
vi redis.conf注释掉# bind 127.0.0.1
protected-mode修改为no ###允许外界访问
在这里插入图片描述

7 Redis分为16个库的作用

Redis默认的情况下分为16个库
0-15,每个单独的库key不允许重复,不同的库key允许重复

8 Redis的五种数据类型

Redis数据结构
String类型、Hsh类型、List类型、Set类型 、Sorted-Sets

./redis-cli -h 192.168.206.101 -p 6379 -a 123456
String类型
String是redis最基本的类型,一个key对应一个value,redis的string可以包含任何数据。比如jpg图片或者序列化的对象, Sring类型是Redis最基本的数据类型,一个键最大能存储512MB。
Set name mayikt
Get name

Hash类型
将Redis中的Hash类型看成具有<key,<key1,value>>,其中同一个key可以有多个不同key值的<key1,value>,所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。
HMSET mayikt zhangsan 21 lisi 22 wangwu 23
HGETALL mayikt

List类型
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
LPUSH mayiktlist xiaoming xiaojun xiaoxiao
LRANGE mayiktlist 0 10

Redis 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
SADD mayiktset mayikt mayikt02 mayikt03 mayikt03
SMEMBERS mayiktset

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

Redis如何存放一个java对象
直接存放json类型即可
Set key=user value={“userid”:100,”username”:yushengjun}
Xxl-sso 底层如何存放对象 存放二进制

9 SpringBoot整合Redis框架

SpringBoot整合Redis
在Redis存放一个对象 使用json序列化与反序列化

Maven依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
<dependencies>
    <!-- 集成commons工具类 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <!-- 集成lombok 框架 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <!-- fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.30</version>
    </dependency>
    <!-- SpringBoot-整合Web组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
</dependencies>
<!-- 管理依赖 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.M7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

工具类

@Component
public class RedisUtils {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void setString(String key, String value) {
        setString(key, value, null);
    }

    public void setString(String key, String value, Long timeOut) {
        stringRedisTemplate.opsForValue().set(key, value);
        if (timeOut != null) {
            stringRedisTemplate.expire(key, timeOut, TimeUnit.SECONDS);
        }
    }

    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

}

其他代码

@Data
public class UserEntity {
    private Long userId;
    private String userName;
}
@RestController
public class RedisController {

    @Autowired
    private RedisUtils redisUtils;

    @GetMapping("/addUser")
    private String addUser(UserEntity userEntity) {
        // 将对象转换为json
        String jsonString = JSONObject.toJSONString(userEntity);
        redisUtils.setString("userEntity", jsonString);
        return "存储成功";
    }

    @GetMapping("/getUser")
    public UserEntity getUser(String key){
        String jsonString = redisUtils.getString(key);
        UserEntity userEntity = JSONObject.parseObject(jsonString, UserEntity.class);
        return userEntity;
    }
}
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class);
    }
}

配置文件application.yml

spring:
  redis:
    host: 192.168.206.101
    password: 123456
    port: 6379
    database: 1

测试结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值