28.Redis

作者: 星野君 | 来源:发表于2022-05-13 15:57 被阅读0次

一、下载安装
Windows:Releases · microsoftarchive/redis · GitHub
Linux: Download | Redis

  • Linux安装:
    1.将redis安装包上传到Linux
    2.解压安装包,命令:tar -zxvf redis-7.0.0.tar.gz -C /usr/loacl
    3.安装redis的依赖环境gcc,命令:yum install gcc-c++
    4.进入/usr/local/redis-7.0.0, 进行编译,命令:make
    5.进入redis的src目录进行安装,命令:make install

启动服务

redis-server
或
./redis-server

连接redis

redis-cli
或
./redis-cli

后台启动redis

vim redis-conf  //修改redis配置文件
/deamonize //搜索deamonize 
daemonize yes  //把no改成yes
src/redis-server ./redis.conf //最后启动redis服务器,加载redis.conf这个配置文件

设置启动密码校验

vim redis-conf //修改配置文件
requirepass foobared //取消注释,foobared 是默认密码
src/redis-cli -a 密码 //访问数据库

允许远程连接

vim redis-conf  //修改redis配置文件
/bind 127.0.0.1 //搜索bind
#平时/bind 127.0.0.1 //注释掉这行
src/redis-server ./redis.conf //最后启动redis服务器,加载redis.conf这个配置文件

在远程输入
.\redis-cli.exe -h 192.168.138.100 -p 6379 -a 123456
注意:无法连接检查防火墙

二、数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

  • string常用命令
    1.SETkey value //设置指定key的值
    2.GET key //获取指定key的值
    3.SETEX key seconds value //获取指定key的值,并且将key的过期时间设置为seconds 秒
    4.SETNX key value //只有key不存在时设置key的值

  • hash常用命令
    1.HSET key field value 将哈希表key中的字段field的值设置为value
    2.HGET key field 获取存储在哈希表中指定字段的值
    3.HDEL key field 删除存储在哈希表中的指定字段
    4.HKEYS key 获取哈希表中所有字段
    5.HVALS key 获取哈希表中的所有值
    6.HGETALL key 获取在哈希表中指定key的所有字段和值

  • list常用命令
    1.LPUSH key value1 value2 将一个或者多个插入到列表头部
    2.LRANGE key start stop 获取列表指定范围内的元素
    3.RPOP key 一处并获取列表最后一个元素
    4.LLEN key 获取列表长度
    5.BRPOP key1 key2 timeout 一处并获取列表最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发行可弹出元素为止

  • set常用命令
    Redis 集合(Set)_w3cschool

三、Spring Data Redis

  1. 导入坐标
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  1. application.yml
spring:
  application:
    name: springdataredi s_demo
  #redis相关配置
  redis:
    host: localhost
    port: 6379
    database: 0 #操作的是0号数据库
    # password: 123456
    jedis:
      #redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大等待时间
        max-idle: 4 #连接池最大空闲连接
        min-idle: 0 #连接池最小空闲连接

  1. 测试
package com.example.redis;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

import java.util.List;
import java.util.Set;

@SpringBootTest
class RedisApplicationTests {
  @Autowired
  RedisTemplate redisTemplate;
  @Autowired
  StringRedisTemplate stringRedisTemplate;

  @Test
  void string() {
    // String类型的操作
    redisTemplate.opsForValue().set("job","嘿嘿");
    final String job = (String) redisTemplate.opsForValue().get("job");
    System.out.println(job);

    stringRedisTemplate.opsForValue().set("city","北京");
    String city = stringRedisTemplate.opsForValue().get("city");
    System.out.println("city:"+city);
  }

  @Test
  public void hash(){
    // hash类型的操作
    final HashOperations hashOperations = stringRedisTemplate.opsForHash();

    hashOperations.put("user","name","张三");
    hashOperations.put("user","age","15");
    hashOperations.put("user","sex","男");
    final String name = (String) hashOperations.get("user", "name");
    System.out.println(name);
    final Set<Object> user = hashOperations.keys("user");
    for (Object o : user) {
      System.out.println(o);
    }

    Map<String,String> map=new HashMap<>();
    map.put("军师","诸葛亮");
    map.put("猛将1","赵子龙");
    hashOperations.putAll("蜀国",map);
  }

  @Test
  public void list(){
    //List类型的操作
    final ListOperations listOperations = stringRedisTemplate.opsForList();
    // 存值
    listOperations.leftPush("id","1");
    listOperations.leftPushAll("id","2","3","4");
    // 获取值
    final List<String> id = listOperations.range("id", 0, -1);
    for (String o : id) {
      System.out.println(o);
    }
    // 出队列
    final Long idl = listOperations.size("id");
    final int idSize = idl.intValue();
    for (int i = 0; i < idSize; i++) {
      final String id1 = (String) listOperations.rightPop("id");
      System.out.println(id1);
    }
  }

  @Test
  public void set(){
    final SetOperations<String, String> setOperations = stringRedisTemplate.opsForSet();
    setOperations.add("myset","1","2","3","1");
    // 取值
    Set<String> myset = setOperations.members("myset");
    for (String s : myset) {
      System.out.println(s);
    }
    // 删除
    setOperations.remove("myset","2","3");
    myset = setOperations.members("myset");
    for (String s : myset) {
      System.out.println(s);
    }
  }

  @Test
  public void zset(){
    final ZSetOperations<String, String> zSetOperations = stringRedisTemplate.opsForZSet();
    //存值
    zSetOperations.add("myZset","a",10);
    zSetOperations.add("myZset","b",13);
    zSetOperations.add("myZset","c",8);
    //取值
    Set<String> myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
      System.out.println(s);
    }
    //修改
    zSetOperations.incrementScore("myZset","a",50);
    myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
      System.out.println(s);
    }
    //删除
    zSetOperations.remove("myZset","a","b");
  }

  @Test
  public void common(){
    // 返回所有key
    final Set<String> keys = stringRedisTemplate.keys("*");
    for (String key : keys) {
      System.out.println(key);
    }
    //判断某个key是否存在
    final Boolean name = stringRedisTemplate.hasKey("name");
    System.out.println(name);

    //删除某个key
    final Boolean job = stringRedisTemplate.delete("job");

    //获取指定key的value数据类型
    final DataType dataType = stringRedisTemplate.type("name");
    System.out.println(dataType.name());
  }

}


当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可,但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。

@Configuration
public class RedisConfig {

    /**
     * 设置Redis序列化方式,默认使用的JDKSerializer的序列化方式,效率低,这里我们使用 FastJsonRedisSerializer
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // key序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // value序列化
        redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
        // Hash key序列化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // Hash value序列化
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

相关文章

  • 28.redis

    内容 Redis 案例:

  • 28.Redis

    一、下载安装Windows:Releases · microsoftarchive/redis · GitHub[...

网友评论

      本文标题:28.Redis

      本文链接:https://www.haomeiwen.com/subject/lposurtx.html