Redis部分数据结构方法小结

本文涉及的产品
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内存数据库,简单巩固一下它的各种数据类型与用法~

目录
相关文章
|
3月前
|
NoSQL 数据可视化 Redis
redis上db复制的方法
首先排除使用命令行实现,因为没有现成的命令可以完成db复制,跨redis实例的复制迁移就更加没有这种命令了。假如非要使用命令来实现,要写大量的脚本,但是这样可靠性和速度无法保证,因为你无法保证你写的程序是否会有bug。db的复制,可以使用yunedit-redis来实现,yunedit-redis有可视化界面,复制起来非常简单。
|
3月前
|
存储 消息中间件 NoSQL
Redis数据结构:别小看这5把“瑞士军刀”,用好了性能飙升!
Redis提供5种基础数据结构及多种高级结构,如String、Hash、List、Set、ZSet,底层通过SDS、跳表等实现高效操作。灵活运用可解决缓存、计数、消息队列、排行榜等问题,结合Bitmap、HyperLogLog、GEO更可应对签到、UV统计、地理位置等场景,是高性能应用的核心利器。
NoSQL 数据可视化 关系型数据库
74 0
|
3月前
|
存储 消息中间件 NoSQL
【Redis】常用数据结构之List篇:从常用命令到典型使用场景
本文将系统探讨 Redis List 的核心特性、完整命令体系、底层存储实现以及典型实践场景,为读者构建从理论到应用的完整认知框架,助力开发者在实际业务中高效运用这一数据结构解决问题。
|
3月前
|
存储 缓存 NoSQL
Redis基础命令与数据结构概览
Redis是一个功能强大的键值存储系统,提供了丰富的数据结构以及相应的操作命令来满足现代应用程序对于高速读写和灵活数据处理的需求。通过掌握这些基础命令,开发者能够高效地对Redis进行操作,实现数据存储和管理的高性能方案。
116 12
|
3月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
283 86
|
3月前
|
存储 缓存 NoSQL
【Redis】 常用数据结构之String篇:从SET/GET到INCR的超全教程
无论是需要快速缓存用户信息,还是实现高并发场景下的精准计数,深入理解String的特性与最佳实践,都是提升Redis使用效率的关键。接下来,让我们从基础命令开始,逐步揭开String数据结构的神秘面纱。
|
4月前
|
NoSQL 数据可视化 网络安全
redis客户端备份/迁移数据的方法
第二种是客户端备份,客户端连接redis数据源,使用redis的标准协议进行导出和导入。优点是只需要知道redis的用户名和密码,而不需要知道redis的宿主机的ssh密码即可操作。而且备份和恢复数据,不会影响新数据,比如备份到恢复这段时间产生了其他的主键的数据,恢复是不会清掉这部分主键的。 目前支持redis备份/数据迁移的可视化客户端软件,主要是yunedit-redis
|
4月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
263 6
|
7月前
|
存储 NoSQL 算法
Redis设计与实现——数据结构与对象
Redis 是一个高性能的键值存储系统,其数据结构设计精妙且高效。主要包括以下几种核心数据结构:SDS、链表、字典、跳跃表、整数集合、压缩列表。此外,Redis 对象通过类型和编码方式动态转换,优化内存使用,并支持引用计数、共享对象和淘汰策略(如 LRU/LFU)。这些特性共同确保 Redis 在性能与灵活性之间的平衡。

热门文章

最新文章