4、redis Windows版 以及客户端Another Redis Desktop Manager

  • redis

    • 定义

      • Redis是一个基于内存的key-value结构数据库

      • Redis 是互联网技术领域使用最为广泛的存储中间件

    • 网址

      • 官网:https://redis.io

      • 中文网:https://www.redis.net.cn/

    • 主要特点

      • - 基于内存存储,读写性能高

      • - 适合存储热点数据(热点商品、资讯、新闻)

      • - 企业应用广泛

    • 说明

      • Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库

      • 官方提供的数据是可以达到100000+的QPS(每秒内查询次数)

      • 它存储的value类型比较丰富,也被称为结构化的NoSql数据库

        • NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库

        • NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充

      • 关系型数据库(RDBMS)

        • - Mysql

        • - Oracle

        • - DB2

        • - SQLServer

      • 非关系型数据库(NoSql)

        • - Redis

        • - Mongo db

        • - MemCached

  • Redis入门

    • Redis下载与安装

      • Redis下载

        • Windows版下载地址:https://github.com/microsoftarchive/redis/releases

        • Linux版下载地址: https://download.redis.io/releases/

      • Redis安装

        • 在Windows中安装Redis(项目中使用)

          • Redis的Windows版属于绿色软件,直接解压即可使用

          • redis.windows.conf:Redis配置文件

          • redis-cli.exe:Redis客户端

          • redis-server.exe:Redis服务端

        • 在Linux中安装Redis(简单了解)

          • 1. 将Redis安装包上传到Linux

          • 2. 解压安装包,命令:tar -zxvf redis-4.0.0.tar.gz -C /usr/local

          • 3. 安装Redis的依赖环境gcc,命令:yum install gcc-c++

          • 4. 进入/usr/local/redis-4.0.0,进行编译,命令:make

          • 5. 进入redis的src目录进行安装,命令:make install

          • 安装后重点文件说明

            • /usr/local/redis-4.0.0/src/redis-server:Redis服务启动脚本

            • /usr/local/redis-4.0.0/src/redis-cli:Redis客户端脚本

            • /usr/local/redis-4.0.0/redis.conf:Redis配置文件

    • Redis服务启动与停止

      • 服务启动命令

        • redis-server.exe redis.windows.conf

        • Redis服务默认端口号为 6379 ,通过快捷键Ctrl + C 即可停止Redis服务

        • 当Redis服务启动成功后,可通过客户端进行连接

      • 客户端连接命令

        • redis-cli.exe

        • redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接

          • -h ip地址

          • -p 端口号

          • -a 密码(如果需要)

      • 修改Redis配置文件

        • 设置Redis服务密码,修改redis.windows.conf

          • requirepass 123456

        • 注意:

          • 修改密码后需要重启Redis服务才能生效

          • Redis配置文件中 # 表示注释

        • 重启Redis后,再次连接Redis时,需加上密码,否则连接失败

          • redis-cli.exe -h localhost -p 6379 -a 123456

          • 此时,-h 和 -p 参数可省略不写

      • Redis客户端图形工具

        • 默认提供的客户端连接工具界面不太友好,同时操作也较为麻烦

        • Another Redis Desktop Manager

          • 安装完毕后,直接双击启动

          • 新建连接

          • 连接成功

  • Redis数据类型

    • 5种常用的数据类型

      • 字符串 string

        • 普通字符串,Redis中最简单的数据类型

      • 哈希 hash

        • 也叫散列,类似于Java中的HashMap结构

      • 列表 list

        • 按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList

      • 集合 set

        • 无序集合,没有重复元素,类似于Java中的HashSet

      • 有序集合 sorted set / zset

        • 集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

    • 操作命令

      • 更多命令可以参考Redis中文网:https://www.redis.net.cn

      • 字符串类型常用命令

        • SET key value 设置指定key的值

        • - GET key 获取指定key的值

        • SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒

        • SETNX key value 只有在 key不存在时设置 key 的值

      • Redis hash

        • 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象

        • 哈希操作命令

          • HSET key field value 将哈希表 key 中的字段 field 的值设为 value

          • HGET key field 获取存储在哈希表中指定字段的值

          • HDEL key field 删除存储在哈希表中的指定字段

          • HKEYS key 获取哈希表中所有字段

          • HVALS key 获取哈希表中所有值

      • Redis 列表

        • Redis 列表是简单的字符串列表,按照插入顺序排序

        • 常用命令

          • LPUSH key value1 [value2] 将一个或多个值插入到列表头部

          • LRANGE key start stop 获取列表指定范围内的元素

          • RPOP key 移除并获取列表最后一个元素

          • LLEN key 获取列表长度

          • BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止

      • Redis set

        • 是string类型的无序集合

          • 集合成员是唯一的,这就意味着集合中不能出现重复的数据

        • 常用命令

          • SADD key member1 [member2] 向集合添加一个或多个成员

          • SMEMBERS key 返回集合中的所有成员

          • SCARD key 获取集合的成员数

          • SINTER key1 [key2] 返回给定所有集合的交集

          • SUNION key1 [key2] 返回所有给定集合的并集

          • SREM key member1 [member2] 移除集合中一个或多个成员

      • Redis有序集合

        • 是string类型元素的集合,且不允许有重复成员,每个元素都会关联一个double类型的分数

        • 常用命令

          • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

          • ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员

          • ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment

          • ZREM key member [member ...] 移除有序集合中的一个或多个成员

      • Redis的通用命令

        • KEYS pattern 查找所有符合给定模式( pattern)的 key

        • EXISTS key 检查给定 key 是否存在

        • TYPE key 返回 key 所储存的值的类型

        • DEL key 该命令用于在 key 存在是删除 key

          • 删除的时候不支持通配符

  • 在Java中操作Redis

    • 1、Redis的Java客户端

      • 在java程序中操作Redis

        • 需要使用Redis的Java客户端

        • 如同我们使用JDBC操作MySQL数据库一样

      • 常用的几种

        • Jedis

        • Lettuce

        • Spring Data Redis

          • Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis

          • 在Spring Boot项目中还提供了对应的Starter

          • 即 spring-boot-starter-data-redis

    • 2、Spring Data Redis使用方式

      • 定义

        • pring Data Redis 是 Spring 的一部分,在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装

        • 在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作

      • 网址:https://spring.io/projects/spring-data-redis

      • Spring Boot提供了对应的Starter

        • <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

      • Spring Data Redis中提供了一个高度封装的类:RedisTemplate

        • 对相关api进行了归类封装,将同一类型操作封装为operation接口

        • 分类

          • ValueOperations:string数据操作

          • SetOperations:set类型数据操作

          • ZSetOperations:zset类型数据操作

          • HashOperations:hash类型的数据操作

          • ListOperations:list类型的数据操作

    • 3、环境搭建:在sky-server模块中

      • 1、导入Spring Data Redis的maven坐标(已完成)

        • <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

      • 2、配置Redis数据源

        • 在application-dev.yml中添加

          • sky: redis: host: localhost port: 6379 password: 123456 database: 10

          • 解释说明

            • database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。

            • 可以通过修改Redis配置文件来指定数据库的数量。

        • 在application.yml中添加读取application-dev.yml中的相关Redis配置

          • spring: profiles: active: dev redis: host: ${sky.redis.host} port: ${sky.redis.port} password: ${sky.redis.password} database: ${sky.redis.database}

      • 3、编写配置类,创建RedisTemplate对象

        • package com.sky.config; @Configuration @Slf4j public class RedisConfiguration { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ log.info("开始创建redis模板对象..."); RedisTemplate redisTemplate = new RedisTemplate(); //设置redis的连接工厂对象 redisTemplate.setConnectionFactory(redisConnectionFactory); //设置redis key的序列化器 redisTemplate.setKeySerializer(new StringRedisSerializer()); return redisTemplate; } }

        • 解释说明

          • 当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为

          • JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为StringRedisSerializer序列化器

      • 4、测试通过RedisTemplate对象操作Redis

        • 创建一个测试类SpringDataRedisTest

          • 类上使用@SpringBootTest注解

        • @Autowired private RedisTemplate redisTemplate;

          • 注入RedisTemplate对象

        • 创建testRedisTemplate方法

          • 方法上加上@Test注解

        • //string数据操作 ValueOperations valueOperations = redisTemplate.opsForValue();

        • //hash类型的数据操作 HashOperations hashOperations = redisTemplate.opsForHash();

        • //list类型的数据操作 ListOperations listOperations = redisTemplate.opsForList();

        • //set类型数据操作 SetOperations setOperations = redisTemplate.opsForSet();

        • //zset类型数据操作 ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    • 4、操作常见类型数据(以下皆为测试方法)

      • 操作字符串类型数据

        • /** * 操作字符串类型的数据 */ @Test public void testString(){ // set get setex setnx redisTemplate.opsForValue().set("name","小明"); String city = (String) redisTemplate.opsForValue().get("name"); System.out.println(city); redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES); redisTemplate.opsForValue().setIfAbsent("lock","1"); redisTemplate.opsForValue().setIfAbsent("lock","2"); }

      • 操作哈希类型数据

        • /** * 操作哈希类型的数据 */ @Test public void testHash(){ //hset hget hdel hkeys hvals HashOperations hashOperations = redisTemplate.opsForHash(); hashOperations.put("100","name","tom"); hashOperations.put("100","age","20"); String name = (String) hashOperations.get("100", "name"); System.out.println(name); Set keys = hashOperations.keys("100"); System.out.println(keys); List values = hashOperations.values("100"); System.out.println(values); hashOperations.delete("100","age"); }

      • 操作列表类型数据

        • /** * 操作列表类型的数据 */ @Test public void testList(){ //lpush lrange rpop llen ListOperations listOperations = redisTemplate.opsForList(); listOperations.leftPushAll("mylist","a","b","c"); listOperations.leftPush("mylist","d"); List mylist = listOperations.range("mylist", 0, -1); System.out.println(mylist); listOperations.rightPop("mylist"); Long size = listOperations.size("mylist"); System.out.println(size); }

      • 操作集合类型数据

        • /** * 操作集合类型的数据 */ @Test public void testSet(){ //sadd smembers scard sinter sunion srem SetOperations setOperations = redisTemplate.opsForSet(); setOperations.add("set1","a","b","c","d"); setOperations.add("set2","a","b","x","y"); Set members = setOperations.members("set1"); System.out.println(members); Long size = setOperations.size("set1"); System.out.println(size); Set intersect = setOperations.intersect("set1", "set2"); System.out.println(intersect); Set union = setOperations.union("set1", "set2"); System.out.println(union); setOperations.remove("set1","a","b"); }

      • 操作有序集合类型数据

        • /** * 操作有序集合类型的数据 */ @Test public void testZset(){ //zadd zrange zincrby zrem ZSetOperations zSetOperations = redisTemplate.opsForZSet(); zSetOperations.add("zset1","a",10); zSetOperations.add("zset1","b",12); zSetOperations.add("zset1","c",9); Set zset1 = zSetOperations.range("zset1", 0, -1); System.out.println(zset1); zSetOperations.incrementScore("zset1","c",10); zSetOperations.remove("zset1","a","b"); }

      • 通用命令操作

        • /** * 通用命令操作 */ @Test public void testCommon(){ //keys exists type del Set keys = redisTemplate.keys("*"); System.out.println(keys); Boolean name = redisTemplate.hasKey("name"); Boolean set1 = redisTemplate.hasKey("set1"); for (Object key : keys) { DataType type = redisTemplate.type(key); System.out.println(type.name()); } redisTemplate.delete("mylist"); }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值