暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis的安装与使用

码酱 2020-08-15
330

简介     

       Redis 是一种非关系型数据库(NoSQL),NoSQL 是以 key-value 的形式存储的,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说 SQL 标准,ACID 属性,表结构等等,这类数据库主要有以下特点:非关系型的、分布式的、开源的、水平可扩展的。

       NoSQL 使用场景有:对数据高并发读写、对海量数据的高效率存储和访问、对数据的高可扩展性和高可用性等等。为了保证效率,数据都是在缓存在内存中,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件中。有了 redis 有哪些好处呢?举个比较简单的例子,看下图:

Redis 集群和 Mysql 是同步的,首先会从 redis 中获取数据,如果 redis 挂了,再从 mysql 中获取数据,这样网站就不会挂掉。

Redis的安装

为了简化操作快速开始,我这里使用到docker环境进行安装。假设你的虚拟机上已经安装docker。

搜索redis镜像    docker search redis 
拉取redis镜像 docker pull redis:5.0
创建容器,设置端口映射 docker run -id --name=c_redis -p 6379:6379 redis:5.0

测试

你也可以不使用docker环境安装

1. # yum install -y gcc-c++        由于是 c 语言编写,所以需要安装支持组件
2. 把压缩包上传到 linux 服务器上 示例位置: /usr/local/tmp/
3. # cd /usr/local/tmp # tar zxvf redis-5.0.6.tar.gz 进入到/usr/local/tmp 下 运行解压命令
4. # make 进入到解压后的目录编译
5. # make install PREFIX=/usr/local/redis 安装,设置安装路径为/usr/local/redis 下 进入到 src 下安装
6. # ./redis-server 前端启动,安装后不能进行其他操作 Ctrl+c 退出 命令要在 bin 目录下执行
7. # cp /usr/local/tmp/redis-5.0.6/redis.conf /usr/local/redis/bin 把解压目录下配置文件拷贝到安装目录的 bin 下
8.# vim redis.conf 修改 bin 下 redis.conf 把 daemonize 由 no 修改成 yes,守护进程启动
9.# ps aux|grep redis 查看 redis 启动情况
10.#./redis-server redis.conf 启动 redis 服务
11.# ./redis-cli shutdown 如果希望关闭,运行上面命令,不关闭不运行即可
12.# ./redis-cli 进入到自带客户端工具,测试 redis 是否可用
测试案例
# set name ‘diku’ 添加一个 string ,key 为 name,value 为 diku
# get name 取出 name 中内容

Redis的数据类型

       使用场景介绍

数据类型
使用场景
String(字符串)

1、访问量统计:每次访问博客和文章使用 INCR 命令进行递增

2、将数据以二进制序列化的方式进行存储

Hash(字典)1、存储、读取、修改对象属性,比如:用户(姓名、性别、爱好),文章(标题、发布时间、作者、内容)
List(列表)

1、最新消息排行等功能(比如朋友圈的时间线)

2、消息队列

Set(集合)

1、共同好友

2、利用唯一性,统计访问网站的所有独立ip

3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐

Sorted Set(有序集合)

1、排行榜,取TopN操作

2、带权重的消息队列

  常用操作命令我在这里就不写出来了参考,Redis命令手册网址                        http://doc.redisfans.com/

Springboot整合redis

1.导入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--阿里巴巴fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>

2.application.yml配置

server:
port: 8080
spring:
#redis相关配置
redis:
database: 5
# 配置redis的主机地址,需要修改成自己的
host: 192.168.9.120
port: 6379
timeout: 5000
jedis:
pool:
# 连接池中的最大空闲连接,默认值是8。
max-idle: 500
# 连接池中的最小空闲连接,默认值是0。
min-idle: 50
                # 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
max-active: 1000
                # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
max-wait: 2000

3.常用api介绍

Spring Boot 对 redis 的支持提供有两个 redis 模板:RedisTemplate 和 StringRedisTemplate。我们不使用 RedisTemplate,RedisTemplate 提供给我们操作对象,操作对象的时候,我们通常是以 json 格式存储,但在存储的时候,会使用 Redis 默认的内部序列化器;导致我们存进里面的是乱码之类的东西。当然了,我们可以自己定义序列化,但是比较麻烦,所以使用 StringRedisTemplate 模板。StringRedisTemplate 主要给我们提供字符串操作,我们可以将实体类等转成 json 字符串即可,在取出来后,也可以转成相应的对象,这就是上面我导入了阿里 fastjson 的原因。
3.1String类型
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisService {
    private static final Logger log= LoggerFactory.getLogger(RedisService.class);
@Autowired
    private StringRedisTemplate stringRedisTemplate;
/**
* set Redis:String类型
*/
@Test
public void setString() {
stringRedisTemplate.opsForValue().set("weichat","码酱");
User user = new User();
user.setUsername("diku");
user.setPassword("123456");
user.setAge(12);
stringRedisTemplate.opsForValue().set("userInfo", JSON.toJSONString(user));
}
/**
* get Redis:String类型
*/
@Test
public void getString(){
String weichat = stringRedisTemplate.opsForValue().get("weichat");
String userInfo = stringRedisTemplate.opsForValue().get("userInfo");
log.info(weichat);
log.info(userInfo);
}
}
  • 测试结果


3.2Hash类型

    /**
* set get Redis:Hash类型
*/
@Test
public void setAndGetHash(){
stringRedisTemplate.opsForHash().put("user","name","diku");
Object o = stringRedisTemplate.opsForHash().get("user", "name");
log.info("get('user','name')=======>"+String.valueOf(o));
}
  • 测试结果

3.3List类型

    /**
* set get Redis:List类型
*/
@Test
public void setAndGetList(){
stringRedisTemplate.opsForList().leftPush("list","zhangsan");
stringRedisTemplate.opsForList().leftPush("list","lisi");
List<String> list = stringRedisTemplate.opsForList().range("list", 0, -1);
list.forEach(a->
log.info("list中有{}:"+a)
);
}
  • 测试结果



    这里只是列举了一些简单操作,更多的api使用还需要大家自己去尝试和掌握
    总结

     本篇主要介绍了 redis 的安装过程、数据类型使用场景,以及 Spring Boot 中集成 redis 。在实际项目中,通常都用 redis 作为缓存,在查询数据库的时候,会先从 redis 中查找,如果有信息,则从 redis中取;如果没有,则从数据库中查,并且同步到 redis 中,下次 redis 中就有了。更新和删除也是如此,都需要同步到 redis。redis 在高并发场景下运用的很多。

    喜欢我加个关注吧


文章转载自码酱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论