目录
1.基本概念:
1.Redis的安装和启动
下载
目录结构
3.Redis的命令(重点)
Redis数据结构
1.String字符串(重点)
2.Hash哈希(重点)
3.Set集合
4.ZSet集合
通用命令
4.Jedis的基本使用(了解) 相当于JDBC
JedisAPI
5.SpringDataRedis(重点*****)
操作哈希类型数据
操作列表类型数据
操作集合类型数据(扩展)
操作有序集合类型数据(扩展)
通用操作(必须掌握)
1.基本概念:
1.redis介绍:
redis是一个 基于 内存 的 key = value 结构 的数据库
端口号:6379
2.主要特点:
1.内存存储,读写性能高 - Redis读的 速度是110000次/S
2.它存储的 value 类型比较丰富(5种数据类型),也称为结构化NoSQL数据库
3. 适合存储热点且不是时刻发生改变的数据(商品、资讯、新闻)
3.NoSQL介绍
NoSQL(Not Only SQL )不仅仅是SQL,泛指==非关系型数据库==
关系型数据库 (Mysql,Oracle等)
优点:
1.易于维护:都是使用表结构,格式统一
2.使用方便:SQL语言通用
3.可以多表查询:可用于一个表或多个表之间非常复杂查询
缺点:
1.储存在硬盘上,所以读写能力比较差
2.固定的表结构,灵活性差
3.高并发读写需求,硬盘I/O是一个很大的瓶颈
非关系型数据库(redis,MongoDB等)
优点:
1.格式灵活:储存数据的格式可以是key,value等形式的应用场景。
2.速度快:nosql可以使用硬盘或内存为载体,而非硬盘;
3.成本低:nosql数据库部署简单,基本都是免费的;
缺点:
1.不提供sql支持,学习和使用成本较高。
2.一般没有事务处理
3.复杂查询方面欠缺
1.Redis的安装和启动
下载
Reids官网地址:Redis
中文网地址:Redis中文网

目录结构
| 目录或文件 | 作用 |
|---|---|
| redis-benchmark | 性能测试工具 |
| redis-check-aof | AOF文件修复工具 |
| redis-check-dump | RDB文件检查工具(快照持久化文件) |
| redis-cli | 命令行客户端 |
| redis-server | 启动redis服务器 |
| redis.windows.conf | redis核心配置文件 |

启动服务:

启动命令行:

3.Redis的命令(重点)
Redis数据结构
Redis采用的是键值对存储,(key)键的类型只能为字符串,(value)值支持五种数据类型:
字符串:String
哈希:HashMap
双向链表:LinkedList
无序集合:HashSet
有序集合:LinkedHashSet
1.String字符串(重点)
字符串类型是Redis中最为基础的数据存储类型
* 新增 set key value
* 查询 get key* 删除 del key
* 新增的时候设置过期时间(验证码) setex key second value
* 查看剩余时间 ttl key
* 根据键判断记录是否存 exists key 0:不存在 1:存在
2.Hash哈希(重点)
Hash类型极其类似于java中的Map,值里面可以存放一组组的键值对
该类型非常适合于存储java中对象的信息
* 新增 hset key hkey hvalue
* 查询 所有 hgetall key
单个 hget key hkey * 删除
删除单个value的key hdel key hkey
删除redis的key del key
* 获取所有hkey hkeys key
* 获取所有hvalue hvals key
* 新增
左压入
lpush key value
右压入
rpush key value
* 列表长度
llen key
* 查询元素
lrange key [开始索引 结束索引]
0 -1
* 删除元素
左弹出
lpop key
右弹出
rpop key
3.Set集合
Set类型底层是一张hash表。里面的元素是无序的,不可重复的
* 新增
sadd key value
* 查询集合数量
scard key
* 查询元素
smembers key
* 删除元素
srem key value
4.ZSet集合
Zset,也称sortedSet, 在Set的基础上,加入了有序功能,在添加元素的时候,允许指定一个分数,它会按照这个分数排序
* 新增
zadd key score value
* 查询
升序
zrange key [开始索引 结束索引] [withscores]
降序
zrevrange key [开始索引 结束索引] [withscores]* 删除
zrem key value
通用命令
* 模糊查询键
keys ** 删除键
del key....* 根据键判断值类型
type key* 选择数据库
select 0~15* 清空当前数据库
flushdb* 清空所有数据库
flushall
4.Jedis的基本使用(了解) 相当于JDBC
Redis作为一款优秀的缓存服务器存在,大多数语言都提供了连接Redis的驱动包,在java中,比较出名的是Jedis和Redisson,我们今天以Jedis为例学习,看看如何是用程序操作redis。
JedisAPI
| 方法 | 解释 |
|---|---|
| new Jedis(host, port) | 创建jedis对象,参数host是redis服务器地址,参数port是redis服务端口 |
| set(key,value) | 设置字符串类型的数据 |
| get(key) | 获得字符串类型的数据 |
| hset(key,field,value) | 设置哈希类型的数据 |
| hget(key,field) | 获得哈希类型的数据 |
| lpush(key,values) | 设置列表类型的数据 |
| lpop(key) | 列表左面弹栈 |
| rpop(key) | 列表右面弹栈 |
| del(key) | 删除指定的key |
<dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.3</version></dependency>
</dependencies>
public static void main(String[] args) {// 1.创建连接Jedis jedis = new Jedis("127.0.0.1", 6379);// 2.新增jedis.set("1002", "李四");//3.查询String value = jedis.get("1002");System.out.println(value);// 4.关闭连接jedis.close();}
Jedis连接池
public static void main(String[] args) {// 0.创建连接池配置对象JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(50); // 最大连接数config.setMaxIdle(20); // 最大空闲数// 1.创建连接池JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);// 2.获取连接Jedis jedis = jedisPool.getResource();// 3.进行 新增、修改、删除、查询// 4.归还连接jedis.close();}
5.SpringDataRedis(重点*****)
介绍:
Spring Data Redis提供了 从Spring应用程序轻松配置和访问Redis的功能
通过RedisTemplate对底层Jedis进行了高度封装,提供了redis各种操作
-
ValueOperations:简单键值对操作 String
-
SetOperations:set类型数据操作 set
-
ZSetOperations:zset类型数据操作 sortedset---->zset
-
HashOperations:针对hash类型的数据操作 hash
-
ListOperations:针对list类型的数据操作 list
环境搭建
1.依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version>
</parent><dependencies><!-- SpringDataRedis框架--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- spring测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
2.配置文件
spring:redis:host: localhostport: 6379database: 0 # 操作的是0号数据库jedis: #Redis连接池配置pool:max-active: 8 #最大连接数max-wait: 1ms #连接池最大阻塞等待时间max-idle: 4 #连接池中的最大空闲连接min-idle: 0 #连接池中的最小空闲连接
3.API
@Autowiredprivate RedisTemplate redisTemplate;//二进制(能取,在可视化工具中看不到数据)@Autowiredprivate StringRedisTemplate stringRedisTemplate;//RedisTemplate 的子类
3.1 操作value
// 操作字符串类型
@Test
public void test01() throws Exception {// 获取string操作对象ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();// 存值opsForValue.set("city", "北京");// 取值String value = opsForValue.get("city");System.out.println(value);// 存验证码存活5分钟opsForValue.set("sms_13700137000", "6375",TimeUnit.SECONDS);//删除redisTemplate.delete("city");}
操作哈希类型数据
// 操作hash类型
@Test
public void test02() throws Exception {// 获取hash操作对象HashOperations<String, Object, Object> opsForHash = stringRedisTemplate.opsForHash();// 存值//opsForHash.put("1005", "nage", "zhangsan");//opsForHash.put("1005", "age", "18");//opsForHash.put("1005", "sex", "man");// 取出年龄String age = (String) opsForHash.get("1005", "age");System.out.println(age);System.out.println("---------------");// 取出所有keySet<Object> keys = opsForHash.keys("1005");for (Object key : keys) {System.out.println(key);if("sex".equals(key)){ops.delete("1005",key); //删除map中的key}}System.out.println("---------------");// 取出所有valueList<Object> values = opsForHash.values("1005");for (Object value : values) {System.out.println(value);}// 删除stringRedisTemplate.delete("1005");
}
操作列表类型数据
// 操作list类型
@Test
public void test03() throws Exception {// 获取list操作对象ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();// 存值//opsForList.leftPush("alist", "a");//opsForList.leftPush("alist", "b");opsForList.leftPushAll("alist", "a", "b");opsForList.rightPush("alist", "c");// 取值List<String> list = opsForList.range("alist", 0, -1);for (String s : list) {System.out.println(s);}System.out.println("--------------");// 获取list长度Long size = opsForList.size("alist");System.out.println(size);System.out.println("--------------");// 遍历删除for (Long i = 0l; i < size; i++) {// 弹出System.out.println(opsForList.rightPop("alist"));}}
操作集合类型数据(扩展)
// 操作set类型
@Test
public void test04() throws Exception {// 获取set操作对象SetOperations<String, String> opsForSet = stringRedisTemplate.opsForSet();// 存值// opsForSet.add("lol", "a", "b", "c", "a");// 获取Set<String> lol = opsForSet.members("lol");for (String s : lol) {System.out.println(s);}// 删除opsForSet.remove("lol", "a");}
操作有序集合类型数据(扩展)
// 操作zset类型
@Test
public void test05() throws Exception {// 获取 zset操作对象ZSetOperations<String, String> opsForZSet = stringRedisTemplate.opsForZSet();// 存值// opsForZSet.add("wangzhe", "安其拉", 66.6);// opsForZSet.add("wangzhe", "兰陵王", 68.6);// opsForZSet.add("wangzhe", "后羿", 79.6);// 修改// opsForZSet.add("wangzhe", "安其拉", 85.6);// 删除opsForZSet.remove("wangzhe", "兰陵王");// 取值Set<String> wangzhe = opsForZSet.reverseRange("wangzhe", 0, -1);for (String s : wangzhe) {System.out.println(s);}}
通用操作(必须掌握)
// 通用操作
@Test
public void test06()throws Exception{// 查询所有keySet<String> keys = stringRedisTemplate.keys("*");for (String key : keys) {System.out.println(key);}// 判断某个key是否存在Boolean itheima = stringRedisTemplate.hasKey("1005");System.out.println(itheima);// 判断某个key的类型DataType type = stringRedisTemplate.type("1005");System.out.println(type.name());
}













