配置文件

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

配置文件不区分大小写

# include .\path\to\local.conf
# include c:\path\to\other.conf

可以导入其他配置文件

网络

  • bind 127.0.0.1#绑定的ip
  • protected-mode yes #保护模式
  • port 6379#默认端口

通用配置GENERAL

  • daemonize yes #以守护进程的方式运行  默认为no 我们要自己变成yes
  • pidfile /var/run/redis_6379.pid #如果以后台的方式进行,我们就需要指定一个pid文件
  • # Specify the server verbosity level.日志级别
    # This can be one of:
    # debug (a lot of information, useful for development/testing)
    # verbose (many rarely useful info, but not a mess like the debug level)
    # notice (moderately verbose, what you want in production probably)
    # warning (only very important / critical messages are logged)
    loglevel notice
  • logfile ""#日志的文件位置
  • databases 16#数据库数量,默认16个
  • always-show-logo yes#打印logo

快照SNAPSHOTTING

在规定的事件执行了多少次操作,则会持久化文件.rdb .aof

#持久化规则
save 900 1
#如果900秒内,如果至少有一个key进行了修改,我们及时进行持久化
save 300 10
#如果300秒内,如果至少有一个10key进行了修改,我们及时进行持久化
save 60 10000

Redis是内存数据库 ,如果没有持久化,那么数据断电小时

  • stop-writes-on-bgsave-error yes #持久化出错,是否还要需要继续工作
  • rdbcompression yes#是否压缩rdb文件,消耗cpu资源
  • rdbchecksum yes#保存rdb文件时,进行检查校验
  • dir ./#rdb 文件保存的目录

复制REPLICATION (主从复制)

安全SECURITY

设置密码:

config set requirepass "123456"
auth 123456

客户端CLIENTS

  • 默认最大的客户端数:

  • maxclients 10000
  • maxmemory <bates>#最大内存设置
  • # maxmemory-policy noeviction#内存达到上线的处理策略

APPEND ONLY MODE AOF

  • appendonly no #默认是不开启的默认是rdb方式持久化的,在大部分情况下,rdb完全够用
  • appendfilename "appendonly.aof"#持久化的文件名字
  • # appendfsync always #每次修改都会sync 消耗性能
    appendfsync everysec #每秒执行一次sync 可能会丢失这一秒的值
    # appendfsync no #不执行sync 这个时候操作系统自己同步数据,速度最快

RDB

什么是RDB

RDB持久化,是Redis可以将数据库状态保存到一个RDB文件中,并可以通过该RDB文件生成RDB文件的时候的数据库状态。RDB文件是一个经过压缩的二进制文件。

Jedis

我们要使用java来操作Redis

什么是Jedis

1.配置环境

<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
</dependencies>

2.编码测试:

  • 连接数据库
  • 操作命令
  • 断开连接

基本代码

package com.Test;

import redis.clients.jedis.Jedis;

import java.util.Set;

public class TestPing {
public static void main(String[] args) {
//1.new 一个Jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
//之前的指令很重要
System.out.println(jedis.ping());
//常用api
jedis.flushDB();//清空数据
jedis.exists("name");//某个键值是否存在
jedis.set("name","hjz");//新增键值对
Set<String> keys = jedis.keys("*");//系统中所有键值
jedis.del("name");//删除键
jedis.exists("name");//判断是否存在
jedis.type("name");//判断键的存储类型
jedis.randomKey();//随机返回一个key的空间
jedis.rename("name","username");//重命名
jedis.get("username");//取出username
jedis.select(0);//按照索引查询
jedis.flushDB();//删除选择数据库的值
jedis.dbSize();//返回当前数据库的key的数目
jedis.flushAll();//删除所有数据库的所有key
}
}Spring Boot整合Redis

String类型

package com.Test;

import redis.clients.jedis.Jedis;

import java.util.concurrent.TimeUnit;

public class TestString {
public static void main(String[] args) {
//1.new 一个Jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.set("key1","value1");//添加数据
jedis.set("key2","value2");//添加数据
jedis.set("key3","value3");//添加数据
jedis.del("key1");//删除key1
jedis.get("key2");//得到key2
jedis.set("key3","end");//修改key3
jedis.append("key3","aaa");//在key3后加值
jedis.mset("key01","value1","key02","value02");//增加多个键值对
jedis.mget("key01","key02");//获得多个键值对
jedis.del("key01","key02");//删除多个键值对
//分布式锁的-新增键值对放置覆盖原来的值
jedis.setnx("key1","value1");
jedis.setnx("key2","value2");
jedis.setnx("key3","value3");
jedis.get("key1");
//设置过期时间
jedis.setex("key4",5,"value4");
jedis.get("key4");
//睡觉
try{
TimeUnit.SECONDS.sleep(3);
}catch (InterruptedException e){
e.printStackTrace();
}
//获得原来的值,更新为新值
jedis.getSet("key2","key2Get2");
jedis.get("key2");
jedis.getrange("key2",2,4);//获得key2的字符串 }
}

List类型

事务

package com.Test;

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction; public class TestShiwu {
public static void main(String[] args) {
//1.new 一个Jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
//事务
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello","world");
jsonObject.put("name","hjz");
//开启事务
Transaction muil =jedis.multi();
String result = jsonObject.toJSONString();
try{
muil.set("user1",result);
muil.set("user2",result);
int i=1/0;//代码抛出异常,执行失败
muil.exec();//执行事务
}catch (Exception e){
//放弃事务
muil.discard();
e.printStackTrace();
}finally {
System.out.println(jedis.get("user1"));
jedis.close();//关闭连接
} }
}

spring boot操作数据:sprig-data jpa jdbc mongodb redis

Spring Data也是Spring Boot起名的项目

jedis:采用的是直连,多线程是不安全的,如果想要避免是不安全的,使用jedis pool 连接池!BIO

lettuce:采用netty 实例可以多个线程中共享,不存在线程不安全的情况,可以减少线程的数量,更像NIO模式

源码分析

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
@AutoConfiguration
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
} @Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)//不纯在才生效
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//默认的RedisTempalte没有过多的设置,redis都是需要序列化的
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
} @Bean
@ConditionalOnMissingBean//由于String类型最常使用单独提出来一个
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}
}

整合测试

最新文章

  1. Xamarin的不归路-使用Gorilla Player实时预览XAML
  2. EF with (LocalDb)V11.0
  3. 【BZOJ 4269】再见Xor
  4. Linux内核中大小端判定宏
  5. 剑指offer系列42---二叉树深度
  6. 01-Quartz2D介绍
  7. 关键字 explicit
  8. How to effectively work with multiple files in Vim?
  9. [Rails Level 2] Ground up
  10. 怎样在WIN7系统下安装IIS和配置ASP(详细)
  11. angularjs表单中enter键提交
  12. TextView 设置图片
  13. QTP11完美破解小笔记
  14. Trie树 字典树-学习笔记
  15. 金蝶K3 WISE BOM多级展开_销售成本表
  16. API--ResponseBody-类
  17. BBS-文章详情页、评论、评论树
  18. python基础-pthon
  19. Kafka消费者APi
  20. HTML/HTML5

热门文章

  1. Spring校验器实例
  2. VR技术名词解释
  3. day14 I/O流——序列化与反序列化 &amp; 计算机网络五层架构 &amp; TCP的建立连接与断开连接
  4. TypeScript 之 Class
  5. Django测试脚本-单表操作(增删改查)-必知必会13条-神奇的双下划线
  6. vue中单独封装elementui中的Dialog弹框组件
  7. 痞子衡嵌入式:对比恩智浦全系列MCU(包含Kinetis/LPC/i.MXRT/MCX)的GPIO电平中断设计差异
  8. 5、枚举Enum
  9. 【转载】SQL SERVER 中各种存储过程创建及执行方式
  10. WCH沁恒 CH37系列芯片选型以及常见问题的处理(CH376/CH378)