Redis部分数据结构方法小结

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: package com.practice.util; import java.util.HashMap; import java.util.List; import java.util.Map; import java.
package com.practice.util;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


public class RedisUtil {
	private static final Log log = LogFactory.getLog(RedisUtil.class); 

    private static JedisPool jedisPool;//非切片连接池
    
    private static final Object lock = new Object();
    
    private static final int DEFAULT_TIME_OUT = 30000;
    
    private static String redisIp = "192.168.77.153";
    
    private static Integer redisPort = 7000;
    
    /**
	 * 构建redis切片连接池
	 * 
	 * @param ip
	 * @param port
	 * @return JedisPool
	 */
    public static JedisPool getJedisPool() {
        if (jedisPool == null) {
            synchronized (lock) {
            	if (jedisPool == null) {
                    JedisPoolConfig config = new JedisPoolConfig();
                    //设置连接池初始化大小和最大容量
                    
                    // 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
                    // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
                    config.setMaxTotal(-1);
                    
                    // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
                    config.setMaxIdle(1000);
                    // 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
                    config.setMaxWaitMillis(1000 * 30);
                    // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
                    config.setTestOnBorrow(true);
                    // 写
                    jedisPool = new JedisPool(config, redisIp, redisPort,DEFAULT_TIME_OUT);
                    
                }
            }
        }
        return jedisPool;
    }
    
    /**
     * 返还到连接池
     * 
     * @param pool 
     * @param redis
     */
    public static void returnJedisResource(Jedis redis) {
        if (redis != null) {
            redis.close();
        }
    }
    
    //直接set key-value
    public static void setStructure(String key,String value){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.set(key, value);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    public static void getSetStructure(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        String value = "";
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            value = jedis.get(key);
            System.out.println(value);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    //通过key删除数据
    public static void delKey(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.del(key);
            System.out.println("del key success");
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    //mset相当于 jedis.set("key1","value1");jedis.set("key2","value2")
    public static void msetData(String key1,String value1,String key2,String value2){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.mset(key1,value1,key2,value2);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    public static void flushData(){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.flushAll();
            System.out.println("flushAll success");
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    //判断key是否存在,如果存在则返回1,否则则返回0 
    public static boolean booleanExsit(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        Boolean exsit = false;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            exsit =  jedis.exists(key);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
		return exsit;
    }
    
    public static void appendData(String key,String data){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.append(key, data);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    //截取value的值
    public static void getRange(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            String value = jedis.getrange(key, 0, 1);
            System.out.println(value);
            System.out.println();
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    //列表操作 用于将一个或多个值插入到列表的尾部(最右边), 如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。
    public static void rpush(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.rpush(key, "Hello how are you?");  
            jedis.rpush(key, "Fine thanks. I'm having fun with redis.");  
            jedis.rpush(key, "I should look into this NOSQL thing ASAP");         
            } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    //取出列表中相应位置的值
    public static void getPushValue(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            //第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有  
            List<String> values = jedis.lrange(key, 0, -1);
            System.out.println(values);
            } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    public static void Set(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.sadd("myset", "1");  
            jedis.sadd("myset", "2");  
            jedis.sadd("myset", "3");  
            jedis.sadd("myset", "4");  
            Set<String> setValues = jedis.smembers("myset"); 
            System.out.println(setValues);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    public static void srem(String key){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.srem(key, "4");
            Set<String> setValues = jedis.smembers("myset"); 
            System.out.println(setValues);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    public static void hmset(){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            Map<String, String> pairs = new HashMap<String, String>(); 
            pairs.put("name", "Akshi");  
            pairs.put("age", "2");  
            pairs.put("sex", "Female");  
            jedis.hmset("kid", pairs);  
            List<String> name = jedis.hmget("kid", "name");
            System.out.println(name);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }
    
    public static void increment(){
    	JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.hset("hashs", "entryKey", "1");  
            jedis.hset("hashs", "entryKey1", "entryValue1");  
            jedis.hset("hashs", "entryKey2", "entryValue2");  
            // 判断某个值是否存在 
            jedis.hexists("hashs", "entryKey");
            System.out.println(jedis.hincrBy("hashs", "entryKey", 1));  
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
        	  returnJedisResource(jedis);
        }
    }

  

Redis在工程开发中还是比较常用的Nosql内存数据库,简单巩固一下它的各种数据类型与用法~

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
41
分享
相关文章
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
162 4
Redis 5 种基础数据结构?
Redis的五种基础数据结构——字符串、哈希、列表、集合和有序集合——提供了丰富的功能来满足各种应用需求。理解并灵活运用这些数据结构,可以极大地提高应用程序的性能和可扩展性。
42 2
|
2月前
|
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
55 5
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
81 10
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
2月前
|
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
66 5
介绍下Redis 的基础数据结构
本文介绍了Redis的基础数据结构,包括动态字符串(SDS)、链表和字典。SDS是Redis自实现的动态字符串,避免了C语言字符串的不足;链表实现了双向链表,提供了高效的操作;字典则类似于Java的HashMap,采用数组加链表的方式存储数据,并支持渐进式rehash,确保高并发下的性能。
介绍下Redis 的基础数据结构
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
Redis 数据结构与对象
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求和数据特点来选择合适的数据结构,并合理地设计数据模型,以充分发挥 Redis 的优势。
65 8
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等