进入redis安装目录下,修改配置文件,进行后台启动服务
修改配置文件,设置密码。
修改如下配置文件
然后可以通过window客户端进行对Linux服务端进行连接
====================================================
=========================================================
public class JedisTest{
@Test
public void testRedis(){
//1.获取连接
Jedis jedis = new Jedis("localhost",6379);
//2.执行具体操作
jedis.set("username","jordan");
String value = jedis.get("username");
jedis.hset("myhash","addr","beijing");
String hValue = jedis.hget("myhash","addr");
Set<String> keys = jedis.keys("*");
for(String key:keys){
System.out.println(key);
}
jedis.del("username");
//3.关闭连接
jedis.close();
}
}
SpringBoot项目中
spring:
application:
name: apringdataredis_demo
redis:
host: host
port: 6379
password: 123456
database: 0
jedis:
pool:
max-active: 8 #最大连接数
max-wait: 1ms #连接池中最大阻塞等待时间
max-idle: 4 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
该配置类用以将改变序列化方式
@Configuration
public class RedisConfig extends CachingConfigurerSupport{
@Bean
public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
//默认的key序列化器为:JdkSerializationRedisSerializer
//修改如下的序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest{
@Autowired
private RedisTemplate redisTemplate;
//操作String类型
@Test
public void testString(){
ValueOperations valueOperations = redisTemplate.opsForValue();//简单的k-v操作
//key和value存放的时候会使用到序列化器
//key需要更改默认的序列化器,而value不需修改,直接使用默认的序列化器即可
valueOperations.set("city","beijing");
Object value = rdisTemplate.opsForValue().get("city");
//指定设置的超时时间
redisTemplate.opsForValue().set("key1","value1",10L,TimeUnit.SECONDS);
//如果不存在就设置,没有操作返回false
Boolean b = redisTemplate.opsForValue().setIfAbsent("city123","nanjing");
}
//操作Hash类型
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002","name","jordan");
hashOperations.put("002","age","23");
//取值
String age = (String)hashOperations.get("002","name");
//获取hash结构所有的字段
Set Keys = hashOperations.keys("002");
for(Object key : keys){
System.put.println(key);
}
//获取hash结构中所有的值
List values = hashOperations.values("002");
for(Object value : values){
System.out.println(value);
}
}
//操作List类型数据
@Test
public testList(){
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPush("myLists","a");
listOperations.leftPushAll("myList","b","c","d");
//取值
List<String> myList = listOperations.range("myList",0,-1);
for(String value:myList){
System.out.println(myList);
}
//获取列表长度
Long size = listOperations.size("myList");
int lSize = size.intValue();
for(int i = 0;i<lSize;i++){
//出队列
Object element = listOperations.rightPop("myList")
System.out.println(element);
}
}
//操作Set类型数据
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","a");
//取值
Set myset = setOperations.members("myset");
for(String o :mySet){
System.out.println(o);
}
//删除成员
setOperations.remove("myset");
}
//操作ZSet类型数据
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",10.0);
zSetOperations.add("myZset","b",11.0);
zSetOperations.add("myZset","c",12.0);
zSetOperations.add("myZset","d",13.0);
//取值
set<String> myZset = zSetOperations.range("myZset",0,-1);
for(String s:myZset){
System.out.println(s)
}
//修改分数
zSetOperations.incrementScore("myZset","b",20.0);
//删除成员
zSetOperations.remove("myZset","a","b");
}
//通用操作
@Test
public void testCommon(){
//获取redis中左右的key
Set<String> keys = redisTemplate.keys("*");
for(String key:keys){
System.out.println(key)
}
//判断某个key是否存在
Boolean itcast = redisTemplate.hasKey("itcast");
System.out.prinltn(itcast);
//删除指定key
redisTemplate.delete("myZset");
//获取指定key对应的value数据类型
DataType myset = redistemplate.type("myset");
}
}
======================================================================================
Redis-Cluster集群
官方推荐6个实力,3个主节点,3个从节点
高可用:一旦有主节点发生故障,可以选举出对一个的从节点称为新的主节点继续对外提供服务。
槽位:
使用redis建立集群
-
进入其中一个节点redis后台docker exec -it redis-7001 bash
-
创建三个主节点,指定副本,自动分配各槽以及主节点对一个从节点
-
进行操作(集群模式需要加参数-c)
内部会根据key进行重定向对应的节点槽
同样对主节点的操作也会对应同步到从节点
-
模拟主节点宕机
查看集群状况(包括集群节点数量)
查看节点状况
docker stop redis-7001
从节点7006取代宕机的7001,如果7001重新上线,那么7001成为7006的从节点
Redis可视化工具
iredis工具通过命令行格式化json。
官网地址:https://iredis.io/
可视化工具
桌面版这次评测的软件如下:
- redis desktop manager 官网:https://redisdesktop.com/ ,以前免费,现在收费。
- medis 官网:http://getmedis.com/,免费,缺点是不支持key的命名空间展示,不支持redis 5.0的stream数据类型,命令行比较单一,不支持自动匹配和提示。支持的value的展现方式也只有3种。
- AnotherRedisDesktopManager官网:https://github.com/qishibo/AnotherRedisDesktopManager,不支持stream数据类型。命令行模式也比较单一。value展示支持的类型也只有3种。
- fastoredis 官网:https://fastoredis.com/,收费,还要注册账号
- redis-plus 官网:https://gitee.com/MaxBill/RedisPlus,免费桌面客户端软件
- red 官网:在苹果Mac用户可以去app store里面搜,app store下载的redis可视化工具
Web版本评测的软件如下:
- redis-insight,官网https://redislabs.com/redisinsight/ 全面性和分析监控方面,确实是其他redis可视化工具难以企及的
IDE插件版本,这里只评测IntelliJ IDEA的插件,eclipse的就不作介绍了
- Iedis2 IntelliJ IDEA的插件,在IDEA的plugin市场里就可以搜到,但是为收费插件