• redis回顾


    redis

    》nosql
    非关系型数据库
    基于内存的key-value形式
    与sql区别:非结构化、无关联的(每个key只要求不同,实际互不干扰)、非sql、没有acdi事务。
    单线程、每个命令具备原子性
    低延迟、速度快(百万级别)----亮点
    支持数据持久化
    支持主从集群、分片集群

    通用命令:keys (数据量大慎用)
    del
    exists
    expire(有效期)
    ttl(查看剩下有效期)

    经典五种基本类型

    String

    string
    int
    float
    字符串最大空间不超过512m

    指令
    set
    get
    mset
    mget
    incr
    incrby
    incrbyfloat
    setnx
    setex

    可以用:隔开命名
    规范 项目名:业务名:类型:id

    hash

    value是无序字典
    类似java hashmap
    CRUD单个字段更容易

    命令
    hset
    hget
    hmset
    hmget
    hgetall
    hkeys(数据量大慎用)
    hvals
    hncrby
    hsetnx

    List

    与java linkedlist类似,双向链表,支持正向反向检索
    有序
    可重复
    插入,删除快
    查询一般
    应用场景:朋友圈点赞列表、评论列表

    命令
    lpush
    lpop
    rpush
    rpop
    lrange
    blpop
    brpop

    补充:队列 先进先出
    栈 先进后出

    set

    与hashset类似
    无序
    元素不可重复
    查找快
    支持交集、并集、差集(相对来说SQL实现比较复杂,所以用redis更简洁)

    命令
    sadd
    srem 移除指定
    scard 元素个数
    sismember 判断一个元素是否存在set中
    smembers 所有
    sinter 交集
    sdiff 差集
    sunion 并集

    sortedset

    可排序set 与treeset类似
    元素不重复
    查询速度快
    应用:排行榜

    命令
    zadd
    zrem
    zscore
    zrank
    zcard
    zcount
    zincrby
    zrange
    zrangebyscore
    zdiff
    zinter
    zunion

    java工具类

    spring data redis
    jedis lettuce

    jedis

    1、引入依赖

    <dependency>
    <groupId>redis-clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、建立连接

    private Jedis jedis;
    @BrforeEach
    void xx() {
    	jedis = new Jedis("127.0.0.1",6379);
    	jedis.auth("root");
    	jedis.select(0);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、实现

    @Test
    void xx() {
    String result = jedis.set("name","df");
    jedis.get("name");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、释放资源

    @AfterEach
    void xx() {
     if(jedis != null) {
     	jedis.close();
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    jedis本身线程不安全—》推荐线程池

    public class xxx {
    	private static final JedisPool jedisPool;
    	static {
    		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    		jedisPoolconfig.setMaxTotal(8);
    		jedisPoolConfig.setMaxIdle(8);
    		jedisPoolConfig.setMinIdle(0);
    		jedisPoolConfig.serMaxWaitMilis(200);
    		jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379, 1000, "root");
    		public static Jedis getJedis() {
    			return jedisPool.getResource();
    }
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    SpringDataRedis企业用的多

    api
    redisTeplate通用
    redisTeplate.opsForvalue() String
    redisTeplate.opsForHash()
    redisTeplate.opsForList()
    redisTeplate.opsForSet()
    redisTeplate.opsForZSet()

    1、引入依赖

    <dependency>
    	<groupId>org.springframework-boot</groupId>
    	<artifactId>spring-boot-starter-data-redis</artiactId>
    </dependency>
    <dependency>
    	<groupId>org.apache.cmmons</groupId>
    	<artifactId>commons-pool2</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、配置
    spring:
    redis:
    host: 127.0.0.1
    port: 6379
    password: root
    lettuce:
    pool:
    max-active: 8
    max-idle: 8
    min-idle: 0
    max-wait: 100

    3/应用

    @Autowired
    private RedisTemplate redisTemplate;
    
    @Test
    public void test() {
    	redisTemplate.opsForValue().set("name","fds");
    	Object name = redisTemplate.opsForValue().get("name");
    	sout(name);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    存入的数据\xAC\xED\x00…
    可以序列化处理

    1、使用StringRedisTemplate
    2、Redis写入对象序列化为JSON
    3、Reids读取JSON反序列化为对象

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    private static final ObjectMapper mapper = new ObjectMapper();
    
    @Test
    public void test() throws JsonProcessingException {
    	User user = new User(299L,"dfs");
    	String json = mapper.writeValueAdString(user);
    	String val = stringReditsTemplate.opsForValue().set("user:newUser:" + user.getId());
    	User result = mapper.redValue(val, User.class);
    	sout(result);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    node.js的安装配置教程
    CentOS 7 安装mariadb
    企业ERP管理系统功能分析
    leetcode 1235
    P1025 [NOIP2001 提高组] 数的划分(dfs搜有顺序)
    springboot毕设项目一品萫茶馆管理系统的设计与实现69dcm(java+VUE+Mybatis+Maven+Mysql)
    基于JAVA音乐网站的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    渗透测试-文件包含漏洞以及php伪协议的应用
    回放及资料下载|2022 智能云边开源峰会
    webpack和vite的区别
  • 原文地址:https://blog.csdn.net/weixin_43206161/article/details/125609087