java | (三十六)redis(1)安装、数据类型、Jedis、整合springboot


本文主要根据尚硅谷b站视频学习,

安装

在虚拟机Linux中安装,下载,然后放到虚拟机的/opt路径下
在这里插入图片描述
解压,然后通过make指令编译和安装,在此之前,要安装好c语言环境和gcc,这里就不细说了

启动

前台启动“redis-server
在这里插入图片描述
后台启动
到/opt路径下,复制conf文件
在这里插入图片描述
在这里插入图片描述
进入/etc,修改redis.conf
在这里插入图片描述
这里改成yes,保存退出
在这里插入图片描述
在etc…目录下运行conf文件,完成后台运行
在这里插入图片描述
来验证一下:
在这里插入图片描述
在这里插入图片描述
关闭redis
在这里插入图片描述
或者用kill命令

介绍

默认16个数据库,下标0开始,使用select命令来切换数据库,所有库同样密码。

dbsize查看当前数据库的key
flushdb清空当前数据库
flushall通杀全部库

在这里插入图片描述

数据类型

key操作

先设定key
在这里插入图片描述
查看key,及查看key的类型
在这里插入图片描述

删除key
在这里插入图片描述
expire key 10:给key设置10s过期时间
在这里插入图片描述
ttl查看还有多少秒过期,-1表示永不过期,-2表示已经过期
查看当前数据库key数量
在这里插入图片描述
清空:flushdb
在这里插入图片描述

字符串(String)

set <key> <value>
get <key>
在这里插入图片描述
setnx <key> <value>只有key不存在时,设置key的值
incr <key>增加1
decr <key>减一
在这里插入图片描述
incrby/decrby / <步长>:增加/减少步长
在这里插入图片描述
mset、mget:设置多个key value值

在这里插入图片描述
获取范围getrange
在这里插入图片描述
setrange <key><起始位置><value>
用value覆写指定位置的字符串
在这里插入图片描述
setnx <key> <value>设置键的同时,设置过期时间
getset <key><value>设置了新值同时获得旧值

List

Redis列表是简单的字符串列表,按照插入顺序排序,底层为一个双向链表,对两端的操作性很高,通过索引下标的操作中间的节点性能会较差
lpush/rpush key1 value1 value2…:从左/右边插入一个值
在这里插入图片描述
lpop/rpop从左、右吐一个值
lrange key start stop按照索引下标从左往右获得元素
在这里插入图片描述
lindex key index 按照索引下标获得元素
llen key 获得列长度

在这里插入图片描述
lrem key n value:从左边删除n个value
iset key index value:将列表key下标为index的值替换成value

set集合

sadd key value1 value2添加
****加粗样式smembers key查询
在这里插入图片描述
sismemer key value判断集合key是否含有value值,有1,没有0
scard key返回该集合的元素个数
在这里插入图片描述
**srem key value1 value2…**删除集合某元素
spop key 随机从集合中吐一个值
在这里插入图片描述
srandmember key n:随机从该集合中取出n个值,不会从集合删除
在这里插入图片描述
smove key1 key2 value:将key1中的value值转给key2
在这里插入图片描述
sinter key1 key2返回交集元素
sunion key1 key2返回并集元素
sdiff key1 key2 返回两个集合的差集元素(key1中的,不包括k2中的)
在这里插入图片描述
Set集合数据结构是字典,字典是通过哈希表实现的

哈希(Hash)

hash是键值对集合,是string类型的field和value的映射表,hash特别适合用于存储对象,类似java里面的Map<String,Object>

hset key field value:设定值
hget key field:获取field的值

在这里插入图片描述
hmset key field1 value1 field2 value2 : 批量设置
在这里插入图片描述
hexists key field:判断field是否存在
在这里插入图片描述
hkeys key:列出所有field
hvals key:列出所有value
在这里插入图片描述
hincrby key field n:将field增加n
hsetnx key field value:将key中的域field的值设为value,当且仅当域field不存在

有序集合Zset

没有重复元素的字符串集合,有序集合的每个成员都关联了一个评分score,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员,集合成员是唯一但评分可以重复

添加:zadd key score1 value1 score2 value2…
在这里插入图片描述
zrange key start stop:排名显示
在这里插入图片描述
zrangebyscore key min max [withscores] : 在此区间内元素从小到大排序
在这里插入图片描述
在这里插入图片描述
zrevrangebyscore key max min [withscores] : 在此区间从大到小排序
在这里插入图片描述
zincrby key increment value:给value增加increment分数
在这里插入图片描述
zcount key min max : 统计min到max间元素个数
zrank key value : 返回该值在集合中的排名,从0开始
在这里插入图片描述
zrem key value : 删除该集合,给定值的元素

发布和订阅

pub/sub是一种消息通信模式:发送者pub发送信息,sub订阅者接收信息
Redis可以订阅任意数量的频道
订阅者:
在这里插入图片描述

发布者:
在这里插入图片描述
订阅者收到发布者发布的haha:
在这里插入图片描述

其它数据类型

Bitmaps

Redis提供这个"数据类型"可以对位进行操作,实际是字符串

setbit key offset value设置键的第offset个位的值(从0算起)
getbit key offset 获取值
在这里插入图片描述
bitop and b1 b2 : 两个bitmap都共有值的数量
在这里插入图片描述

HyperLogLog

基数
添加:pfadd key value1 value2
pfcount key 统计数量
在这里插入图片描述
合并
pfmerge key1 key2 合并数量
在这里插入图片描述

Geographic

经纬度设置

geoadd key 经度 纬度 value : 添加
geopos key value : 获取经纬度值
geodist key value1 value2 [单位]: 计算value1和value2的距离(单位默认为米)
在这里插入图片描述
指定坐标内,指定半径内的城市
如:指定110 30坐标内,1000km的城市
在这里插入图片描述

Jedis

登录maven,添加依赖:

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

然后测试:

package com;

import redis.clients.jedis.Jedis;
public class JedisDemo1 {
    
    
    public static void main(String[] args) {
    
    
        Jedis jedis = new Jedis("192.168.19.130",6379);
        //测试
        String value = jedis.ping();
        System.out.println(value);

    }
}

结果:
在这里插入图片描述

Jedis操作数据类型

操作key
查找数据库中所有的key

    //操作key
    @Test
    public void demo1(){
    
    
        Jedis jedis = new Jedis("192.168.19.130",6379);
        Set<String> keys = jedis.keys("*");
        keys.forEach(System.out::println);

    }

结果:
在这里插入图片描述

        //添加key
        jedis.set("name","lucy");
        
        //获取
        String name = jedis.get("name");
        
        //设置多个key-value
        jedis.mset("k1","desk","k2","room","k3","bed");
        List<String> kList = jedis.mget("k1","k2","k3");

操作list

    @Test
    public void demo2(){
    
    
        Jedis jedis = new Jedis("192.168.19.130",6379);
        jedis.lpush("key1","lucy","marry","john");
        List<String> lList = jedis.lrange("key1",0,-1);
        System.out.println(lList);
    }

结果:
在这里插入图片描述
操作set

    @Test
    public void demo3(){
    
    
        Jedis jedis = new Jedis("192.168.19.130",6379);
        jedis.sadd("sname","lucy","jack","mike");
        Set<String> s = jedis.smembers("sname");
        System.out.println(s);
    }

操作Hash

    @Test
    public void demo4(){
    
    
        Jedis jedis = new Jedis("192.168.19.130",6379);
        jedis.hset("users","age","20");
        String age = jedis.hget("users","age");
    }

操作z-set

    @Test
    public void demo5(){
    
    
        Jedis jedis = new Jedis("192.168.19.130",6379);
        jedis.zadd("z",200,"java");
        jedis.zrange("z",0,-1);
    }

springboot整合redis

除了springboot本身依赖外,还需要以下:

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

        <!--spring集成redis所需common-pool2-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.7.0</version>
        </dependency>

在application.properties文件配置

# 应用名称
spring.application.name=test

spring.redis.host=192.168.19.130
spring.redis.port=6379

#redis数据库索引(默认为0)
spring.redis.database=0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大数量(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池最小空闲连接
spring.redis.lettuce.pool.min-idle=0

写个controller来test一下

package com.redis.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/redisTest")
public class RedisTestController {
    
    

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping
    public String testRedis(){
    
    
        redisTemplate.opsForValue().set("name","john");
        return (String)redisTemplate.opsForValue().get("name");
    }
}

运行下,如果出错,可以在Testapplication加上

@EnableAutoConfiguration(exclude={
    
    DataSourceAutoConfiguration.class})

结果:
在这里插入图片描述
挺入门的,能实现就是一小步

猜你喜欢

转载自blog.csdn.net/weixin_42953201/article/details/121347595