栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis入门

  • Redis是一个基于内存的key-value结构数据库。
  • 基于内存存储,读写性能高
  • 适合存储短时间内大量被访问的数据
  • 应用场景:缓存、任务队列、消息队列、分布式锁
Linux安装Redis

        启动Redis服务:redis-server,默认端口为6379

        霸屏运行,需要复制一个新的标签窗口。 

         启动客户端: redis-cli

         修改配置文件,让Redis服务在后台运行:(Ctrl+C 停掉服务)

该配置文件在Redis的根目录下。 

         命令后面显示地添加要加载哪个Redis的配置文件(redis.conf)

         设置(redis-conf文件中)需要密码并设置密码为123456:

         杀掉原来的Redis进程,重新启动服务,启动客户端:

 

         现在只允许本机连接该redis服务,在其他服务器例如Windows中无法连接:

         修改配置文件(redis-conf):

注释掉这一行。

        结束进程并重启redis,其他服务器就能访问了:(需要关闭6379端口的防火墙)

 

Windows安装Redis

               启动Redis服务:双击redis-server.exe

         打开客户端:双击redis-cli.exe

         还需要配置环境变量,注册Windows服务

Redis常用数据类型(指的是value的数据类型,key是固定的字符串类型)
  • 字符串 string 普通字符串,常用
  • 哈希 hash 适合存储对象
  • 列表 list 按照插入顺序排序,可以有重复元素
  • 集合 set 无序集合,没有重复元素
  • 有序集合 sorted set 有序集合,没有重复元素
操作命令(Windows和Linux相同)

        https://www.redis.net.cn

字符串 string 操作命令 

        get返回的值都是“”,都是字符串。 

哈希 hash 操作命令

 

列表 list 操作命令

 

 

集合 set 操作命令

 

有序集合 sorted set 操作命令

 

通用命令

 

在Java中操作Redis
  • Redis的Java客户端:Jedis、Lettuce、Redisson
  • Spring中提供:Spring Data Redis
  • SpringBoot提供:spring-boot-starter=data-redis

Jedis

        Junit也需要

        
            redis.clients
            jedis
            2.8.0
        
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 keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

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

Spring Data Redis
        
            junit
            junit
        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

         application.yml

spring:
  application:
    name: springdataredis_demo
  #Redis相关配置
  redis:
    host: localhost
    port: 6379
    #password: 123456  (当前本地redis没有设置密码)
    database: 0 #操作的是0号数据库,redis默认提供16个数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    //设置key的序列化器(value一般不用,程序中get它的时候会自动反序列化获得
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate 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 {

    //配置文件中写了redis相关配置,springboot就会自动注入这个对象,就可以直接自动装配
    @Autowired
    private RedisTemplate redisTemplate;

    
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city123","beijing");

        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);

        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
    }

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

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

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

        //取值
        List 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);
        }
    }

    
    @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","a","b");

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

    }

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

    
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set 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());

    }
}

 

Spring Cache可整合Redis,简化操作

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/843178.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号