Redis安装和简介

本文档详细介绍了在CentOS7系统中安装和配置Redis的过程,包括下载解压、依赖安装、编译安装、启动服务,以及设置远程连接。此外,还讲解了Redis作为NoSQL数据库在高并发、海量数据场景下的应用,以及其数据结构和Java连接Redis的方法。文章强调了Redis的高性能、原子性和丰富的数据结构特性,适用于缓存、计数器、实时系统等多种场景。
摘要由CSDN通过智能技术生成

CENTOS7下安装REDIS
官网:https://redis.io/download
第一步:解压压缩包

[root@hd01 opt]# tar -zxf redis-5.0.14.tar.gz 
[root@hd01 opt]# mv redis-5.0.14 soft/redis5

第二步:yum安装gcc依赖

[root@hd01 redis5]# yum install -y gcc

第三步:编译安装
make MALLOC=libc

[root@hd01 redis5]# make MALLOC=libc

cd src && make install

[root@hd01 redis5]# cd src
[root@hd01 src]# make install

第四部:启动redis
1.设置远程连接

[root@hd01 src]# vim ../redis.conf ```

在这里插入图片描述
修改为远程IP地址:192.168.100.200
2.登录

[root@hd01 src]# ./redis-server ../redis.conf 

在这里插入图片描述
端口号:6379
//如果端口号被占用:netstat -lnp ------kill -9 ****
PS:这个界面不要关,重新打开一个新的界面

3.新的界面进入redis

[root@hd01 src]# ./redis-cli -h 192.168.100.200
192.168.100.200:6379> select 1
OK
192.168.100.200:6379[1]>

1. NoSQL数据库发展历史简介

1.1 web系统变迁历史
1.1.1 web1.0时代简介
web 1.0是以编辑为特征,网站提供给用户的内容是网站编辑进行编辑处理后提供的,用户阅读网站提供的内容
这个过程是网站到用户的单向行为
web1.0时代的代表站点为新浪,搜狐,网易三大门户
性能要求:
基本上就是一些简单的静态页面渲染,不会涉及太多复杂业务逻辑,功能简单单一,基本上服务器性能不会有太大压力
1.1.2 web2.0时代简介
更注重用户的交互作用,用户既是网站内容的消费者(浏览者),也是网站内容的制造者
加强了网站与用户之间的互动,网站内容基于用户提供(微博、天涯社区、自媒体)
网站的诸多功能也由用户参与建设,实现了网站与用户双向的交流与参与
用户在web 2.0网站系统内拥有自己的数据,并完全基于WEB,所有功能都能通过浏览器完成。
性能要求:
随着Web 2.0时代到来,用户访问量大幅提升,同时产生大量用户数据。加上后来移动设备普及,所有的互联网平台都面临了巨大的性能挑战。数据库服务器压力越来越大
如何应对数据库的压力成为的关键。不管任何应用,数据始终是核心。传统关系型数据库根本无法承载较高的并发,此时人们就开始用Redis当成缓存,来缓解数据库的压力
1.2 什么是NoSQL
NoSQL最常见的解释是“non-relational”, 很多人也说它是“Not Only SQL”
NoSQL仅仅是一个概念,泛指非关系型的数据库
区别于关系数据库,它们不保证关系数据的ACID特性
NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入
1.3 NoSQL的特点
1.3.1 应用场景
高并发的读写
海量数据读写
高可扩展性
速度快
1.3.2 不适用场景
需要事务支持
基于sql的结构化查询存储,处理复杂的关系,需要即席查询(用户自定义查询条件的查询)
1.4 NoSQL数据库
1.4.1 memcache
很早出现的NoSql数据库
数据都在内存中,一般不持久化
支持简单的key-value模式
一般是作为缓存数据库辅助持久化的数据库
1.4.2 redis介绍
几乎覆盖了Memcached的绝大部分功能
数据都在内存中,支持持久化,主要用作备份恢复
除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
一般是作为缓存数据库辅助持久化的数据库
现在市面上用得非常多的一款内存数据库
1.4.3 mongoDB介绍
高性能、开源、模式自由(schema free)的文档型数据库
数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。
1.4.4 列式存储HBase介绍
HBase是Hadoop项目中的数据库。它用于需要对大量的数据进行随机、实时读写操作的场景中。HBase的目标就是处理数据量非常庞大的表,可以用普通的计算机处理超过10亿行数据,还可处理有数百万列元素的数据表。

2. Redis介绍

redis官网地址:
https://redis.io/
中文网站
http://www.redis.cn/
2.1 Redis的基本介绍
Redis是当前比较热门的NoSQL系统之一
它是一个开源的、使用ANSI C语言编写的key-value存储系统(区别于MySQL的二维表格形式存储)
和Memcache类似,但很大程度补偿了Memcache的不足,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失
2.2 Redis的应用场景
2.2.1 取最新N个数据的操作
比如典型的取网站最新文章,可以将最新的5000条评论ID放在Redis的List集合中,并将超出集合部分从数据库获取
2.2.2 排行榜应用,取TOP N操作
这个需求与上面需求的不同之处在于,前面操作以时间为权重,这个是以某个条件为权重,比如按顶的次数排序,可以 使用Redis的sorted set,将要排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。
2.2.3 需要精准设定过期时间的应用
比如可以把上面说到的sorted set的score值设置成过期时间的时间戳,那么就可以简单地通过过期时间排序,定时清除过期数据了,不仅是清除Redis中的过期数据,你完全可以把Redis里这个过期时间当成是对数据库中数据的索引,用Redis来 找出哪些数据需要过期删除,然后再精准地从数据库中删除相应的记录。
2.2.4 计数器应用
Redis的命令都是原子性的,你可以轻松地利用INCR,DECR命令来构建计数器系统。
2.2.5 Uniq操作,获取某段时间所有数据排重值
这个使用Redis的set数据结构最合适了,只需要不断地将数据往set中扔就行了,set意为集合,所以会自动排重。
2.2.6 实时系统,反垃圾系统
通过上面说到的set功能,你可以知道一个终端用户是否进行了某个操作,可以找到其操作的集合并进行分析统计对比等。没有做不到,只有想不到。
2.2.7 缓存
将数据直接存放到内存中,性能优于Memcached,数据结构更多样化。
2.3 Redis的特点
高效性
Redis读取的速度是110000次/s,写的速度是81000次/s
原子性
Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
支持多种数据结构
string(字符串)
list(列表)
hash(哈希)
set(集合)
zset(有序集合
)
稳定性:持久化,主从复制(集群)
其他特性:支持过期时间,支持事务,消息订阅。

3.Redis的数据类型

redis当中一共支持五种数据类型,分别是:
string字符串
list列表
set集合
hash表
zset有序集合

通过这五种不同的数据类型,可以实现各种不同的功能,也可以应用在各种不同的场景。
在这里插入图片描述
Redis当中各种数据类型结构如上图:
Redis当中各种数据类型的操作
https://www.runoob.com/redis/redis-keys.html
3.1 对字符串string的操作
在这里插入图片描述
在这里插入图片描述

3.2对hash列表的操作
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
在这里插入图片描述
在这里插入图片描述
3.3 对list列表的操作
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.4 对set集合的操作
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
在这里插入图片描述
在这里插入图片描述
3.5 对zset的操作
Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员
它用来保存需要排序的数据,例如排行榜,一个班的语文成绩,一个公司的员工工资,一个论坛的帖子等。
有序集合中,每个元素都带有score(权重),以此来对元素进行排序
它有三个元素:key、member和score。以语文成绩为例,key是考试名称(期中考试、期末考试等),member是学生名字,score是成绩。
在这里插入图片描述
在这里插入图片描述

4.Java连接Redis

Redis不仅可以通过命令行进行操作,也可以通过JavaAPI操作,通过使用Java API来对Redis数据库中的各种数据类型操作。
4.1 创建maven工程并导入依赖

<dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!--    <verbal>true</verbal>-->
                </configuration>
            </plugin>
        </plugins>
    </build>

4.2 连接

public class jedisDemo1 {
    @Test
    public void demo1(){
        //设置IP地址和端口
        Jedis jedis = new Jedis("192.168.100.200", 6379);
        //保存数据
        jedis.set("name","ssy");
        //获取数据
        String value = jedis.get("name");
        System.out.println(value);
        //释放资源
        jedis.close();
    }

4.3连接池

public class jedisDemo1 {
    @Test
    public void demo2() {
        //获取连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大连接数
        config.setMaxTotal(30);
        //设置最大空闲连接数
        config.setMaxTotal(10);
        //获得连接池
        JedisPool jedisPool = new JedisPool(config, "192.168.100.200", 6379);
        //获得核心对象:jedis
        Jedis jedis = null;
        //通过连接池获得连接
        jedis = jedisPool.getResource();
        //设置数据
        jedis.set("name", "张三");
        //获取数据
        String value = jedis.get("name");
        System.out.println(value);
        //释放资源
        if (jedis != null) {
            jedis.close();
        }
        //释放连接池
        if (jedisPool != null) {
            jedisPool.close();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值