redis入门学习
2015-10-15 15:44
621 查看
最近有意识的想学学redis.听说快要取代memcached了..
直接正题,首先,我用的是windows的本地环境.需要下载一个redis的服务,用的是win7-64位的..能不能用32位没有试过.
我这里的版本是redis-2.8.12
下载后的zip包解压在一个文件夹中.
解压完毕之后在cmd中切到当前目录...执行 redis-server.exe redis.windows.conf
如果报错了,而且是maxheap的错误..就和网上说的一样..在redis.windows.conf中修改一下参数
# maxheap <bytes>
maxheap 1024000000
.......
找到位置加入maxheap的参数
然后再试试..就会出现一个像饭盒的图形....这就表示成功了..但是这个窗口是不能关的..需要开着窗口..关了服务就停了.
前面听说redis的安装和配置什么的都十分的简单..试过一下..果然名不虚传啊..
继续继续..
然后下面开始java的那部分..
redis在java中有一个jar包叫做jedis,是用于redis的支持的.
我是用的maven, 在maven中找到了他的配置
如果还需要用jedisPool话,还需要再加入common2-pool2-2.3.jar包
确认jar包导入正确后..
创建一个RedisTest
在RedisTest中,最后的test使用的pool, RedisUtil
在程序中需要注意的事
1.redis要配对ip和端口,不然的话就一直报错,connect的错误
2.网上有很多demo都是低版本的.但是在高版本的jedis中..设置JedisPoolConfig时,有两个参数有稍许的变化
一个是 maxActive, 另一个是
maxWait.
在高版本中这两个值已经改名字了. maxActive--------> maxTotal , maxWait-----------------> maxWaitMillis
redis确实是可以支持很多不同类型的key-value值, 比如string,map,sorted set和双向列表等等..
着实很强大..最强大的地方好像是可以解决memcached断电后数据全部丢失的情况.
以后看项目中有没有机会用吧...
直接正题,首先,我用的是windows的本地环境.需要下载一个redis的服务,用的是win7-64位的..能不能用32位没有试过.
我这里的版本是redis-2.8.12
下载后的zip包解压在一个文件夹中.
解压完毕之后在cmd中切到当前目录...执行 redis-server.exe redis.windows.conf
如果报错了,而且是maxheap的错误..就和网上说的一样..在redis.windows.conf中修改一下参数
# maxheap <bytes>
maxheap 1024000000
.......
找到位置加入maxheap的参数
然后再试试..就会出现一个像饭盒的图形....这就表示成功了..但是这个窗口是不能关的..需要开着窗口..关了服务就停了.
前面听说redis的安装和配置什么的都十分的简单..试过一下..果然名不虚传啊..
继续继续..
然后下面开始java的那部分..
redis在java中有一个jar包叫做jedis,是用于redis的支持的.
我是用的maven, 在maven中找到了他的配置
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency>
如果还需要用jedisPool话,还需要再加入common2-pool2-2.3.jar包
确认jar包导入正确后..
创建一个RedisTest
package com.wuxing.learn.redis; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; /** * @author wuxing * @date 2015年10月15日 上午10:59:02 * */ public class RedisTest { private Jedis jedis; @Before public void setup() { // 连接redis服务器,127.1.0.0:6379, 前提是redis服务器要打开 jedis = new Jedis("127.1.0.0", 6379); } /** * redis基本string操作 */ @Test public void testString() { // 设置key-value值 jedis.set("name", "wuxing"); System.out.println(jedis.get("name")); // 拼接key-value值 jedis.append("name", " is a developer"); System.out.println(jedis.get("name")); // 删除key-value值 jedis.del("name"); System.out.println(jedis.get("name")); // 设置多个key-value值 jedis.mset("name", "wuxing", "age", "18", "work", "developer"); //对value进行+1 jedis.incr("age"); System.out.println(jedis.get("name") + " is " + jedis.get("age") + " years old, he is a " + jedis.get("work")); } /** * redis操作Map */ @Test public void testMap() { Map<String, String> map = new HashMap<String, String>(); map.put("name", "wuxing"); map.put("age", "18"); map.put("work", "developer"); jedis.hmset("user", map); // 取出map中的若干个值, 取出的是一个list // 第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数 List<String> rsmap = jedis.hmget("user", "name", "age", "work"); System.out.println(rsmap); //通过hgetAll可以直接把map取出来 Map<String, String> getMap = jedis.hgetAll("user"); System.out.println(getMap); // 删除map中的某个键值 jedis.hdel("user", "age"); System.out.println(jedis.hmget("user", "age")); // 因为删除了,所以返回的是null System.out.println(jedis.hlen("user")); // 返回key为user的键中存放的值的个数2 System.out.println(jedis.exists("user"));// 是否存在key为user的记录 返回true System.out.println(jedis.hkeys("user"));// 返回map对象中的所有key System.out.println(jedis.hvals("user"));// 返回map对象中的所有value Iterator<String> iter = jedis.hkeys("user").iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + jedis.hmget("user", key)); } } /** * jedis操作List */ @Test public void testList() { // 开始前,先移除所有的内容 jedis.del("java framework"); // 先向key java framework中用lpush存放三条数据 jedis.lpush("java framework", "spring"); jedis.lpush("java framework", "struts"); jedis.lpush("java framework", "hibernate"); // 再取出所有数据jedis.lrange是按范围取出, // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有 System.out.println(jedis.lrange("java framework", 0, -1)); // 再向key java framework中用rpush存放三条数据 jedis.del("java framework"); jedis.rpush("java framework", "spring"); jedis.rpush("java framework", "struts"); jedis.rpush("java framework", "hibernate"); System.out.println(jedis.lrange("java framework", 0, -1)); } /** * jedis操作Set */ @Test public void testSet() { // 添加 jedis.sadd("animal", "dog"); jedis.sadd("animal", "cat"); jedis.sadd("animal", "monkey"); jedis.sadd("animal", "duck"); jedis.sadd("animal", "rabbit"); // 移除rabbit jedis.srem("animal", "rabbit"); System.out.println(jedis.smembers("animal"));// 获取所有加入的value, smembers返回一个set System.out.println(jedis.sismember("animal", "rabbit"));// 判断 rabbit // 是否是animal集合的元素 System.out.println(jedis.srandmember("animal")); System.out.println(jedis.scard("animal"));// 返回集合的元素个数 } @Test public void test() throws InterruptedException { // jedis 排序 // 注意,此处的rpush和lpush是List的操作,支持的list是一个双向链表 jedis.del("number");// 先清除数据,再加入数据进行测试 jedis.rpush("number", "1"); jedis.lpush("number", "4"); jedis.lpush("number", "3"); jedis.lpush("number", "2"); System.out.println(jedis.lrange("number", 0, -1));// [2, 3, 4, 1] System.out.println(jedis.sort("number")); // [1, 2, 3, 4] //输入排序后结果 System.out.println(jedis.lrange("number", 0, -1));// [2, 3, 4, 1] //但是实际的顺序没有变 } @Test public void testRedisPool() { RedisUtil.getJedis().set("test", "test is ok!"); System.out.println(RedisUtil.getJedis().get("test")); } }
在RedisTest中,最后的test使用的pool, RedisUtil
package com.wuxing.learn.redis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * @author wuxing * @date 2015年10月15日 上午11:03:54 * */ public final class RedisUtil { //Redis服务器IP private static String ADDR = "127.1.0.0"; //Redis的端口号 private static int PORT = 6379; //访问密码 // private static String AUTH = "wuxing"; //可用连接实例的最大数目,默认值为8; //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 private static int MAX_ACTIVE = 1024; //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 private static int MAX_IDLE = 200; //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException; private static int MAX_WAIT = 10000; private static int TIMEOUT = 10000; //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; private static boolean TEST_ON_BORROW = true; private static JedisPool jedisPool = null; /** * 初始化Redis连接池 */ static { try { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(MAX_ACTIVE); //在高版本的maxActive已经被改名了,现在是maxTotal config.setMaxIdle(MAX_IDLE); config.setMaxWaitMillis(MAX_WAIT); //在高版本的maxWait已经改名了,现在是maxWaitMillis config.setTestOnBorrow(TEST_ON_BORROW); jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT); } catch (Exception e) { e.printStackTrace(); } } /** * 获取Jedis实例 * @return */ public synchronized static Jedis getJedis() { try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * 释放jedis资源 * @param jedis */ public static void returnResource(final Jedis jedis) { if (jedis != null) { jedisPool.returnResource(jedis); } } }
在程序中需要注意的事
1.redis要配对ip和端口,不然的话就一直报错,connect的错误
2.网上有很多demo都是低版本的.但是在高版本的jedis中..设置JedisPoolConfig时,有两个参数有稍许的变化
一个是 maxActive, 另一个是
maxWait.
在高版本中这两个值已经改名字了. maxActive--------> maxTotal , maxWait-----------------> maxWaitMillis
redis确实是可以支持很多不同类型的key-value值, 比如string,map,sorted set和双向列表等等..
着实很强大..最强大的地方好像是可以解决memcached断电后数据全部丢失的情况.
以后看项目中有没有机会用吧...
相关文章推荐
- redis配置文件redis.conf参数说明
- Redis常用命令
- redis 使用密码登录
- redis预切片技术,实现
- C:\windows\softwaredistribution 文件过大如何处理
- redis 基本信息查询
- java redis学习备忘
- 实现Asp.net Mvc分布式Session Redis群集
- redis 3.0源码安装详细步骤说明
- Ehcache与redis
- 基于redis分布式缓存实现(新浪微博案例)
- redis使用的命令记录
- redis 代替 session 多服务器共享的方案梳理
- redis总结
- Redis群集实现Asp.net Mvc分布式Session
- Redis: Jedis中publish/subscribe 使用
- MATLAB 安装 问题 配置Microsoft Visual C++ 2008 Redistributable 的解决方法
- Redis服务器段和客户端 最详细的说明
- windows下安装redis(Redis服务端按照 非常简单)
- centos 6.5 安装redis 2.8.3 测试和应用