Redis基础

一.简介

Redis基于内存储存,Mysql基于磁盘存储 

可以理解为:

 关系型数据库:有表结构的数据库,像Mysql

非关系型数据库:简单的由key和value构成,没有表的概念

二.安装Redis

1. 下载安装

 2. 启动

后台运行设置,先ctrl+c关闭服务然后:

1. 在redis-4.0.0的目录下 vim redis.conf(修改配置文件)

2. 进入配置文件后在命令模式下/dae(表示查找dae相关的内容)

3. 将下面的no改为yes

4. 重新加载配置文件

在redis根目录下:

src/redis-server ./redis.conf

3.连接redis服务

 cd /usr/local/redis-4.0.0/src
//启动服务
./redis-cli

 启动服务后key * 有如下显示

 

4. Windows系统下启动redis

启动服务

 客户端

5. 启动密码校验(起初默认无需密码校验)

在redis的根目录下:

1. vim redis.conf

2. /pass找到下列语句:#requirepass foobared

3. 修改为:requirepass 123456(后面的是密码,前面的注释删掉)

4. 重新启动redis服务,查找现行的redis进程

ps -ef|grep redis 

5. kill -9 9376(9376是上面查找到的redis-server的进程)

6. 重新启动:src/redis-server ./redis.conf

7. 连接redis服务 -h(连接哪里的redis) -p(端口号)——默认是本地的,其实可以不写 

8. 此时没有认证,要认证

auth 123456(跟着的是密码)

启动服务和认证可以统一为:

src/redis-cli -h localhost -p 6379 -a 123456

6. 开启远程连接redis(默认只能本地连接)

1. vim redis.conf

2. 在redis.conf下搜索bind ——> /bind

3. 将这一行注释掉: # bind 127.0.0.1

4. 重新启动服务(按照上面的流程,先杀掉后启动)

5. 改变的地方:

src/redis-cli -h 192.168.10.100(虚拟机的ip地址) -p 6379 -a 123456

三.Redis的数据类型操作

1. 5种数据类型

 2. String

3. Hash

 4. List

 

 返回List名称和列表最后的元素

 5.Set

 6. Sorted Set(从小到大)

 

 7. 通用命令

四.在Java中操作redis

1. Jedis

<dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.8.0</version>
</dependency>

 

public class JedisTest {

    @Test
    public void testRedis(){
        //1 获取连接
        Jedis jedis = new Jedis("localhost",6379);
        
        //2 执行具体的操作
        jedis.set("username","xiaoming");

        String value = jedis.get("username");
        System.out.println(value);

        //jedis.del("username");

        jedis.hset("myhash","addr","bj");
        String hValue = jedis.hget("myhash", "addr");
        System.out.println(hValue);

        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //3 关闭连接
        jedis.close();
    }
}

2. Spring Data Redis

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

2.1. Redis在yml文件中的配置

spring:
  application:
    name: springdataredis_demo
  #Redis相关配置
  redis:
    host: localhost# 服务器ip
    port: 6379
    #password: 123456 #如果有密码就需要
    database: 0 #操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接

 注意:redis默认会提供16个数据库,编号分别为0-15

默认操作的是第0号数据库,select 1就会跳到1号数据库

2.2. Key序列化调整

对于redis的key和value,编译器将内容存储到redis时会通过序列化器对其序列化,最终存储到redis的值
是经过序列化的,序列化后的值对我们来说相当于一串乱码,所以如果我们直接通过redis客户端去获取我们通过java
存储过去的值,会很奇怪(因为序列化了)

对于key,为了便于观察,我们配置RedisConfig去用我们自定义的序列化器,这样就能实现和我们存储进去的值一样
对于value就不需要

注意:从redis客户端直接获取值会得到序列化后的结果,但是从java获取得到的值和存储进去的一样,因为java不仅会序列化,还会反序列化

@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;
    }

}

2.3. 获取对应的操作对象

//String
ValueOperations valueOperations = redisTemplate.opsForValue();
//Hash
HashOperations hashOperations = redisTemplate.opsForHash();
//Set
SetOperations setOperations = redisTemplate.opsForSet();
//List
ListOperations listOperations = redisTemplate.opsForList();
//Zset
ZSetOperations zSetOperations = redisTemplate.opsForZSet();

2.4. String

 @Test
    public void testString(){
        //设置值
        redisTemplate.opsForValue().set("city123","beijing");
        //获取值
        String value = (String) redisTemplate.opsForValue().get("city123");

        System.out.println(value);
        //设置超时时间10l(要long型)
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
        //key存在则不进行任何操作,返回0,key不存在就会正常设置,返回1
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
    }

2.5. Hash

@Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","bj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }

2.6. List

@Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();

        //存值
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }

        //获得列表长度 llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列,也就是左侧进,右侧出
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);//输出顺序:a b c d
        }
    }

2.7. Set

@Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("myset","a","b","c","a");

        //取值
        Set<String> myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

        //删除成员
        setOperations.remove("myset","a","b");

        //取值
        myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

    }

2.8. 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","a",13.0);

        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }

2.9. 通用操作

@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.println(itcast);

        //删除指定key
        redisTemplate.delete("myZset");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值