`
阅读更多
Redis 是一种非关系数据库,能够拥有一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。优点是:
          1.Redis数据库完全在内存中,使用磁盘仅用于持久性
          2.相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。
          3.Redis可以将数据复制到任意数量的从服务器。

Redis 优势:
异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。

支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。

操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。

按照客服端,和服务端。按照后先打开服务端,然后在打开客服端。
Redis常见命令:http://redisdoc.com/key/move.html
select 0 表示选择数据库
keys * 查看数据库中所有的key
设置key 和值 set key value
判断一个key是否存在 exists key
获取key的值 get key 还有很多设置过期时间,覆盖值等,和其他数据类型的用户就不一一列举了。用的时候看吧。反正我是连续用了好几天,有些都没记住。
redis 主要有String set list sortset hashs geo数据类型。可以根据不同用到的情况,用不同的数据类型。

redis 结合java的使用:
package First.com.downjoy.first;

import java.awt.font.ShapeGraphicAttribute;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.GeoCoordinate;
import redis.clients.jedis.GeoUnit;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.jedis.SortingParams;

public class RedisTest {
	
	 
	/**
	 * 非切片
	 */
	private Jedis jedisl;//非切片额客户端连接
	private JedisPool jPool;	
	/**
	 * 切片
	 */
	private ShardedJedis shardedJedis;//切片额客户端连接

	private ShardedJedisPool shardedJedisPool;
	public RedisTest() {
		initJedis();
		initShareedpool();
		jedisl = jPool.getResource();
		shardedJedis = shardedJedisPool.getResource();
	}
	/**
	 * 
     * 初始化非切片池
     */
	private void initJedis(){
	     JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
	     jedisPoolConfig.setMaxIdle(20);//设置最大空闲链接数	     	 
	     jedisPoolConfig.setMaxTotal(1000);
	     jedisPoolConfig.setTestOnBorrow(false);  	
	     jPool = new JedisPool(jedisPoolConfig,"127.0.0.1",6379,0);    	
	}
	
	/**
	 * 切片池
	 */
	public void initShareedpool(){
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxTotal(20);
		config.setMaxIdle(10);
		//设置最大等待时间
		config.setMaxWaitMillis(1000);
		config.setTestOnBorrow(false);
		// slave链接 
		
	
        List<JedisShardInfo> share = new ArrayList<JedisShardInfo>();
        share.add(new JedisShardInfo("127.0.0.1",6379,0));
        
        // 构造池 
        shardedJedisPool = new ShardedJedisPool(config, share);		
	}
	public void show(){
		//KeyOperate(); 
        // SortedSetOperate();
        //StringOperate();
        //ListOperate();
		//setOperate(); 
        //HashOperate();
		GeoOperate();
        
        
        
	}
	 /** 对存储结构为List类型的操作 */
	private void ListOperate() {
		
		//System.out.println(("清空库中所有数据:"+jedisl.flushDB()));
		
		/**
		 * 向list列表添加一些数据
		 */
		shardedJedis.lpush("namelist", "ac");
		shardedJedis.lpush("namelist", "cc");
		shardedJedis.lpush("namelist", "cc");
		shardedJedis.lpush("namelist", "dc");
		shardedJedis.lpush("namelist", "ec");
		shardedJedis.lpush("namelist", "fc");
		System.out.println("打印所有的namelist里的数据:"+shardedJedis.lrange("namelist", 0, -1));	
		System.out.println("删除指定范围的值,只保留第一个和最后一个的值:"+shardedJedis.ltrim("namelist", 0, -2));
		System.out.println("删除指定的值 1表示个数(有重复的时候)"+shardedJedis.lrem("namelist", 1l, "cc"));
		System.out.println("出栈元素:"+shardedJedis.lpop("namelist"));
		System.out.println("打印所有的namelist里的数据:"+shardedJedis.lrange("namelist", 0, -1));
		
		System.out.println("修改列表元素指定的值:"+shardedJedis.lset("namelist", 0, "ddd修改的值"));
		
		System.out.println("列表的长度:"+shardedJedis.llen("namelist"));
		SortingParams sortingParams = new SortingParams();
		//按照字母顺序排序
		sortingParams.alpha();
		sortingParams.limit(0, shardedJedis.llen("namelist").SIZE);
		System.out.println("返回排序后的结果:"+shardedJedis.sort("namelist", sortingParams));
		System.out.println("获取下标为1的元素:"+shardedJedis.lindex("namelist", 1l));
			
	}
	private void StringOperate() {
		System.out.println("======================String_1=========================="); 
        // 清空数据 
        System.out.println("清空库中所有数据:"+jedisl.flushDB());
        
        System.out.println("=============增=============");
        jedisl.set("key001","value001");
        jedisl.set("key002","value002");
        jedisl.set("key003","value003");
        System.out.println("已新增的3个键值对如下:");
        System.out.println(jedisl.get("key001"));
        System.out.println(jedisl.get("key002"));
        System.out.println(jedisl.get("key003"));
        
        System.out.println("=============删=============");  
        System.out.println("删除key003键值对:"+jedisl.del("key003"));  
        System.out.println("获取key003键对应的值:"+jedisl.get("key003"));
        
        System.out.println("=============改=============");
        //1、直接覆盖原来的数据
        System.out.println("直接覆盖key001原来的数据:"+jedisl.set("key001","value001-update"));
        System.out.println("获取key001对应的新值:"+jedisl.get("key001"));
        //2、直接覆盖原来的数据  
        System.out.println("在key002原来值后面追加:"+jedisl.append("key002","+appendString"));
        System.out.println("获取key002对应的新值"+jedisl.get("key002")); 
   
        System.out.println("=============增,删,查(多个)=============");
        /** 
         * mset,mget同时新增,修改,查询多个键值对 
         * 等价于:
         * jedis.set("name","ssss"); 
         * jedis.set("jarorwar","xxxx"); 
         */  
        System.out.println("一次性新增key201,key202,key203,key204及其对应值:"+jedisl.mset("key201","value201",
                        "key202","value202","key203","value203","key204","value204"));   
        jedisl.mset("a", "a1","a2","k2");
        List<String>  mlist = jedisl.mget("key201","key202"); 
        for (String string : mlist) {
			System.out.println("value的值:"+string);
		}
        System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+
        		jedisl.mget("key201","key202","key203","key204"));
        System.out.println("一次性删除key201,key202:"+jedisl.del(new String[]{"key201", "key202"}));
        System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+
        		jedisl.mget("key201","key202","key203","key204")); 
        System.out.println();  
        //jedis具备的功能shardedJedis中也可直接使用,下面测试一些前面没用过的方法
        System.out.println("======================String_2=========================="); 
        // 清空数据 
        System.out.println("清空库中所有数据:"+jedisl.flushDB());       
        System.out.println("=============新增键值对时防止覆盖原先值=============");
        System.out.println("原先key301不存在时,新增key301:"+shardedJedis.setnx("key301", "value301"));
        System.out.println("原先key302不存在时,新增key302:"+shardedJedis.setnx("key302", "value302"));
        System.out.println("当key302存在时,尝试新增key302:"+shardedJedis.setnx("key302", "value302_new"));
        System.out.println("获取key301对应的值:"+shardedJedis.get("key301"));
        System.out.println("获取key302对应的值:"+shardedJedis.get("key302"));
        System.out.println("=============超过有效期键值对被删除=============");
        // 设置key的有效期,并存储数据 
        System.out.println("新增key303,并指定过期时间为2秒"+shardedJedis.setex("key303", 2, "key303-2second")); 
        System.out.println("获取key303对应的值:"+shardedJedis.get("key303")); 
        try{ 
            Thread.sleep(3000); 
        } 
        catch (InterruptedException e){ 
        } 
        System.out.println("3秒之后,获取key303对应的值:"+shardedJedis.get("key303"));  
        System.out.println("=============获取原值,更新为新值一步完成=============");
        System.out.println("key302原值:"+shardedJedis.getSet("key302", "value302-after-getset"));
        System.out.println("key302新值:"+shardedJedis.get("key302"));  
        System.out.println("=============获取子串=============");
        System.out.println("获取key302对应值中的子串:"+shardedJedis.getrange("key302", 5, 7));         	
	}
	private void KeyOperate() {
		System.out.println("======================key=========================="); 
        // 清空数据 
        System.out.println("清空库中所有数据:"+jedisl.flushDB());
        // 判断key否存在 
        System.out.println("判断key999键是否存在:"+shardedJedis.exists("key999")); 
        System.out.println("新增key001,value001键值对:"+shardedJedis.set("key001", "value001")); 
        System.out.println("判断key001是否存在:"+shardedJedis.exists("key001"));
        // 输出系统中所有的key
        System.out.println("新增key002,value002键值对:"+shardedJedis.set("key002", "value002"));
        System.out.println("系统中所有键如下:");
        Set<String> keys = jedisl.keys("*"); 
        Iterator<String> it=keys.iterator() ;   
        while(it.hasNext()){   
            String key = it.next();   
            System.out.println(key);   
        }
        // 删除某个key,若key不存在,则忽略该命令。
        System.out.println("系统中删除key002: "+jedisl.del("key002"));
        System.out.println("判断key002是否存在:"+shardedJedis.exists("key002"));
        // 设置 key001的过期时间
        System.out.println("设置 key001的过期时间为5秒:"+jedisl.expire("key001", 5));
        try{ 
            Thread.sleep(2000); 
        } 
        catch (InterruptedException e){ 
        } 
        // 查看某个key的剩余生存时间,单位【秒】.永久生存或者不存在的都返回-1
        System.out.println("查看key001的剩余生存时间:"+jedisl.ttl("key001"));
        // 移除某个key的生存时间
        System.out.println("移除key001的生存时间:"+jedisl.persist("key001"));
        System.out.println("查看key001的剩余生存时间:"+jedisl.ttl("key001"));
        // 查看key所储存的值的类型
        System.out.println("查看key所储存的值的类型:"+jedisl.type("key001"));
        /*
         * 一些其他方法:1、修改键名:jedis.rename("key6", "key0");
         *             2、将当前db的key移动到给定的db当中:jedis.move("foo", 1)
         */	
	}	
	/**
	 * redis 对set的基本操作
	 */
	public void setOperate(){
		
		/**向nameSET添加数据,如果不存在课题key 这创建key
		 *  如果存在这了添加失败返回0
		 */
		shardedJedis.sadd("nameset", "1","2","4","a","c");
		/**
		 * 向sets 中加入一些数据
		 */
		jedisl.sadd("sets", "1","2","3","a","c");
		System.out.println("获取sets中的所有元素:"+jedisl.smembers("sets"));
		
		
		System.out.println("删除集合中制定的元素:"+jedisl.srem("sets", "1"));
		
		System.out.println("判断1是否在集合sets中:"+jedisl.sismember("sets", "1"));
		System.out.println("判断2是否在集合sets中:"+jedisl.sismember("sets", "2"));
		
		Set<String> redisSet = jedisl.smembers("sets");
		
		
		for (String string : redisSet) {
			System.out.println("获取集合中的每一元素:"+string);
		}
		
		//向集合sets1中加入数据
		jedisl.sadd("sets1", "1","2","3","5","a","c");
		
		System.out.println("求sets1和sets中集合的交集:"+jedisl.sinter("sets","sets1"));
		System.out.println("求sets1和sets中集合的并集:"+jedisl.sunion("sets","sets1"));
		System.out.println("求sets1和sets中集合的差集:"+jedisl.sdiff("sets1","sets"));		
		System.out.println("nameset 是否有值 不存在返回0 存在返回基数:"+shardedJedis.scard("nameset"));
		System.out.println(shardedJedis.echo("nameset"));	
	}
	private void SortedSetOperate() 
    { 
        System.out.println("======================zset=========================="); 
        // 清空数据 
       // System.out.println(jedis.flushDB()); 
        
        System.out.println("=============增=============");
        System.out.println("zset中添加元素element001:"+shardedJedis.zadd("zset", 7.0, "element001")); 
        System.out.println("zset中添加元素element002:"+shardedJedis.zadd("zset", 8.0, "element002")); 
        System.out.println("zset中添加元素element003:"+shardedJedis.zadd("zset", 2.0, "element003")); 
        System.out.println("zset中添加元素element004:"+shardedJedis.zadd("zset", 3.0, "element004"));
        System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));//按照权重值排序
        System.out.println();
        
        System.out.println("=============删=============");
        System.out.println("zset中删除元素element002:"+shardedJedis.zrem("zset", "element002"));
        System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));
        System.out.println();
        
        System.out.println("=============改=============");
        System.out.println();
        
        System.out.println("=============查=============");
        System.out.println("统计zset集合中的元素中个数:"+shardedJedis.zcard("zset"));
        System.out.println("统计zset集合中权重某个范围内(1.0——5.0),元素的个数:"+shardedJedis.zcount("zset", 1.0, 5.0));
        System.out.println("查看zset集合中element004的权重:"+shardedJedis.zscore("zset", "element004"));
        System.out.println("查看下标1到2范围内的元素值:"+shardedJedis.zrange("zset", 1, 2));

    }
	private void HashOperate(){
		System.out.println(shardedJedis.hset("hashs", "a1", "hello1"));
		System.out.println(shardedJedis.hset("hashs", "a2", "hello2"));
		System.out.println(shardedJedis.hset("hashs", "a3", "hello3"));
		System.out.println(shardedJedis.hset("hashs", "a4", "hello4"));
		System.out.println("获取hashs 中的所有value的值:"+shardedJedis.hvals("hashs"));
		System.out.println("新增a4和5的整型键值对"+shardedJedis.hincrBy("hashs", "a5", 5));	
		System.out.println("删除hashs 中指定的值:"+shardedJedis.hdel("hashs", "a1"));	
		System.out.println("判断a5是否存在:"+shardedJedis.hexists("hashs", "a5"));
		System.out.println("获取a4对应的值:"+shardedJedis.hget("hashs", "a4"));
		//获取hash 中所有的key值
		Map<String, String> hashmap = shardedJedis.hgetAll("hashs");	
		System.out.println("获取a4对应的值:"+hashmap.get("a4"));
		System.out.println("批量获取hashs中的value值:"+shardedJedis.hmget("hashs", "a2","a3","a4"));
	}
	private void GeoOperate(){	
		System.out.println("记录用户的位置添加精度和纬度:"+shardedJedis.geoadd("seos", 37.8, 36.5, "user"));
		
		System.out.println("记录用户的位置添加精度和纬度:"+shardedJedis.geoadd("seos", 38.8, 36.5, "user1"));
		System.out.println("记录用户的位置添加精度和纬度:"+shardedJedis.geoadd("seos", 38.8, 37.5, "user2"));
		System.out.println("记录用户的位置添加精度和纬度:"+shardedJedis.geoadd("seos", 40.8, 37.5, "user2"));
		//GeoCoordinate unit = new GeoCoordinate(37.8, 36.5);
		System.out.println("查找附近的人:"+shardedJedis.georadiusByMember("seos", "user", 100.0, GeoUnit.M));
	}	
}




redis 存储结构 String 和 hash和序列化存放 和json 存储的优缺点 http://my.oschina.net/yuyidi/blog/499951

redis 存储字符串时候 set 和 setnx setex 区别 set 存储普通的键值对 setnx 存储也是普通键值对 在key 存在下,不做任何改变 不存在下 创建key 存储 。设置成功,返回 1 ;设置失败,返回 0  setex 设置键值对 并且设置key 存活的时间一秒为单位 key存在下改变key的值,成功返回ok 。 SETEX 是一个原子性(atomic)操作 时间单位为秒。其他4种数据类型可以对比来。按照官方的文档来说,以后可能回取消setnx setex命令 利用SET key value [EX seconds] [PX milliseconds] [NX|XX] ex表示秒时间 px 将键设置毫秒时间,NX只在键不存在时,对键操作 xx键存在时候对键操作.http://redisdoc.com/string/set.html
服务端和客服端下载:http://pan.baidu.com/s/1bXjToE

redis 中geo 类型我测试一下,暂时没有做出来,百度看了看需要导入包,由于时间的关系,就没有仔细研究,等有时间可以好好研究,练习一下。














分享到:
评论

相关推荐

    Windows版 Redis 5.0.14

    Redis 是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息代理。在Windows环境下,Redis 的安装和使用与在Linux系统中有所不同。这里我们将详细讨论Windows版Redis 5.0.14的相关知识点。 1. **Redis ...

    StackExchange.Redis Redis客户端

    最近需要在C#中使用Redis,在Redis的官网找到了ServiceStack.Redis,最后在测试的时候发现这是个坑,4.0已上已经收费,后面只好找到3系列的最终版本,最后测试发现还是有BUG或者是我不会用。没有办法,最好找到了...

    redis在win上的运行脚本redis.bat

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。在Windows操作系统上运行Redis,通常需要借助一些额外的工具。标题提到的"redis在win上的运行脚本redis.bat"就是一个帮助用户在Windows环境下启动...

    Redis Desktop Manager redis的可视化工具压缩包,解压即用

    Redis Desktop Manager是一款强大的开源图形化界面工具,专为管理和操作Redis键值存储系统而设计。它为用户提供了直观且高效的界面,使得在处理Redis数据库时能够更加便捷。这个压缩包包含的就是这款工具的安装文件...

    Redis 7.0.4 x64位 windows 系统 安装包 Redis7.0.4.zip

    Redis7.0.4.zip,解压缩到D盘根目录后,安装后启动为Windows服务 注意是windows 64位系统才可使用,不支持windows 32位系统使用 已经在Win10,Win11,Windows server 2012系统测试运行可用 使用步骤注意事项: ...

    redis win x64位 及 安装卸载RedisServer服务

    Redis是世界上最受欢迎的开源内存数据结构存储系统,它可以用作数据库、缓存和消息代理。在Windows 64位环境下,Redis的安装和卸载过程是很多开发者和系统管理员需要了解的重要技能。以下是对这些知识点的详细说明:...

    Redis-7.0.5-x64 for Windows 64位版 Redis 7.0.5

    Redis是一款高性能的键值对内存数据库,被广泛应用于缓存、数据存储等领域。在这个Windows 64位版本的Redis 7.0.5中,我们能够看到一系列关键组件和配置文件,这使得它能够在Windows环境下运行。以下是关于Redis ...

    若依前后端分离版去redis版/无redis版本

    基于前后端分离的应用,无论是否使用Redis,都需要考虑如何进行数据的存储和缓存。下面我将分别介绍基于Redis和无Redis的两种版本的特点。 基于Redis的版本 特点 缓存处理:Redis作为内存数据库可以用来缓存频繁访问...

    redis 免安装 redis客户端 redis-desktop-manager-0.8.8.384

    Redis 是一个高性能的键值数据库,它以键值对的形式存储数据,广泛应用于缓存、消息中间件、实时分析等领域。在 Windows 环境下,通常需要通过安装过程来设置 Redis 服务,但这里提供的资源是“redis 免安装”,意味...

    Redis使用教程,详解

    Redis 使用教程详解 Redis 是一个高性能的 NoSQL 键值存储数据库,广泛应用于缓存、任务列表、网站访问统计数据、过期处理、应用排行榜、分布式集群架构中的 session 分离等领域。下面是 Redis 的详细使用教程。 ...

    redis 6.0 windows 版本

    Redis是一款高性能的键值存储系统,常用于数据库、缓存和消息代理等场景。它支持丰富的数据类型,如字符串、哈希、列表、集合和有序集合。在Windows平台上使用Redis,通常需要通过编译源码或者寻找预编译的二进制...

    redis3.0安装包 window 64位

    (1)支持Lua脚本:Redis 3.0支持Lua脚本,可以在Redis中执行脚本,大大提高了Redis的灵活性和可扩展性; (2)可插拔模块化:Redis 3.0提供了可插拔的模块化功能,可以根据用户的需求,自定义模块,实现不同的功能...

    【ASP.NET编程知识】.net core使用redis基于StackExchange.Redis.docx

    ASP.NET Core 使用 Redis 基于 StackExchange.Redis ASP.NET Core 是一个开源的、跨平台的框架,使用 C# 语言开发。Redis 是一个基于内存的数据存储系统,可以用来存储和处理大量数据。StackExchange.Redis 是一个...

    redis++使用说明,windows下编译redis-plus-plus

    "Redis++使用说明,windows下编译Redis-Plus-Plus" 在这篇文章中,我们将详细介绍如何在Windows平台下编译Redis++,包括编译hiredis.lib和Win32_Interop.lib静态库文件的过程,然后安装Cmake并编译Redis++,最后...

    redis-windows-7.0.11

    Redis是一种开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis可以用作数据库、缓存和消息中间件。Redis在性能、可扩展性和灵活性方面表现出色,因此被广泛应用于Web...

    redis校验工具redis-full-check

    **Redis 全面检查工具:redis-full-check** Redis 是一款高性能的键值存储系统,广泛应用于缓存、数据库和消息中间件等场景。在实际应用中,为了确保 Redis 的稳定性和数据一致性,需要定期对 Redis 实例进行健康...

    redis连接工具 windows下

    Redis是一款高性能的键值数据库,常用于数据缓存、消息队列等场景。在Windows操作系统中,虽然Redis本身是跨平台的,但直接使用命令行工具进行操作可能会对初学者不太友好,这时就需要借助图形化的Redis连接工具。...

    windows下的redis压缩包

    Redis是一种开源的、基于键值对的数据存储系统,常用于数据库、缓存和消息中间件。在Windows环境下,Redis提供了一个方便的压缩包,让用户能够快速地在Windows操作系统上部署和使用Redis服务,无需复杂的安装过程,...

    Redis7.0.11版本安装包

    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更...

    redis 可视化工具以及免安装redis 绿色版

    Redis,全称Remote Dictionary Server,是一款高性能的键值存储数据库,常用于缓存、消息队列等场景。本文将深入探讨Redis的可视化工具及其免安装绿色版的使用,帮助你更好地管理和操作Redis服务器。 首先,了解...

Global site tag (gtag.js) - Google Analytics