Redis Liunx 环境安装

核心技术点内容

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

Redis的官网:https://redis.io/

内存数据库(nosql数据库)、mysql、sqlserver
关系数据库存放在硬盘中 查询实现io操作
非关系数据库 Redis 持久化机制 淘汰策略
Jvm内置缓存框架 ECACH os cache

注意:Redis官方是没有windows版本的,只有linux,这时候因为 在nio中epoll只有linux操作系统独有

Redis单线线程模型

Redis的底层采用Nio中的多路IO复用的机制,能够非常好的支持这样的并发,从而保证线程安全问题;
Redis单线程,也就是底层采用一个线程维护多个不同的客户端io操作。
但是Nio在不同的操作系统上实现的方式有所不同,在我们windows操作系统使用select实现轮训时间复杂度是为o(n),而且还存在空轮训的情况,效率非常低, 其次是默认对我们轮训的数据有一定限制,所以支持上万的tcp连接是非常难。
所以在linux操作系统采用epoll实现事件驱动回调,不会存在空轮训的情况,只对活跃的 socket连接实现主动回调这样在性能上有大大的提升,所以时间复杂度是为o(1)
注意:windows操作系统是没有epoll,只有linux系统才有epoll
所以为什么nginx、redis都能够非常高支持高并发,最终都是linux中的IO多路复用机制epoll
Redis底层采用nio epoll实现

Linux环境下安装Redis

环境安装Redis
1.上传Redis的安装包 
redis-5.0.6.tar.gz
2.解压我们的Redis安装包
tar -zxvf redis-5.0.6.tar.gz
3.mkdir /usr/redis //创建文件夹
4.make install PREFIX=/usr/redis
5.启动Redis cd /usr/redis/bin     ./redis-server 
环境核心配置
将Redis设置为后台启动
cp /usr/redis-5.0.6/redis.conf    /usr/redis/bin
//需要进去配置文件修改
vi redis.conf  daemonize yes
./redis-server ./redis.conf 重启启动Redis
ps aux | grep 'redis'
设置Redis账号密码
搜索:# requirepass foobared 
requirepass 123456

客户端连接:auth 123456

设置Reids允许ip访问
//需要进去配置文件修改
注释掉bind 127.0.0.1
protected-mode no ###允许外界访问
Redis默认的情况下分为16个库
0-15
Redis数据结构
String类型、Hsh类型、List类型、Set类型 、Sorted-Sets

./redis-cli -h 192.168.212.155 -p 6379 -a 123456
String类型
String是redis最基本的类型,一个key对应一个value,sring类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象, Sring类型是Redis最基本的数据类型,一个键最大能存储512MB。

Set name mayikt
Gey name mayikt

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

HMSET mayikt zhangsan 21
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
SMEMBERS mayiktset

Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
ZADD mayikt 1 redis
ZADD mayiktsets 1 redis
ZRANGE mayiktsets 0 10 WITHSCORES

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

工具类

```bash
@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);
    }
}

控制层

@RestController
public class IndexController {
    @Autowired
    private RedisUtils redisUtils;

    @RequestMapping("/setRedis")
    public void setRedisKey(UserEntity userEntity) {
        redisUtils.setString("userEntity", JSONObject.toJSONString(userEntity));
    }

    @RequestMapping("/getRedis")
    public UserEntity setRedisKey() {
        String userEntityJson = redisUtils.getString("userEntity");
        UserEntity userEntity = JSONObject.parseObject(userEntityJson, UserEntity.class);
        return userEntity;
    }
}
配置文件
spring:
  redis:
    host: 192.168.212.155 //连接的地址
    password: 123456  //配置的密码
    port: 6379  //端口号

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小笛子1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值