zoukankan      html  css  js  c++  java
  • Reids笔记

    Redis 是基于key-value型的数据库,其中value支持的数据类型可包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)

    1.安装

    这里基于window下安装的redis,安装步骤就不多说了,主要记录一下redis的认证登录。

    以下介绍的是修改配置文件,当然也可以直接用命令修改密码。

    首先打开redis.conf文件,修改这里的requirepass 密码,我这里设置的是master

    然后将文件放在redis-server.exe同级目录下

    要使配置文件设置的密码在服务器启动时生效:redis-server redis.conf

    启动一个客户端

    输入keys * 出错:(error) ERR operation not permitted

    再输入 auth master 认证通过

    OK这里已经设置好密码登录

    2.案例

    Maven pom文件依赖

    <!-- redis jar包 -->

    <dependency>

    <groupId>redis.clients</groupId>

    <artifactId>jedis</artifactId>

    <version>2.6.1</version>

    </dependency>

    工具类RedisUtil.java

    public class RedisUtil {
    
    	private static String host = "127.0.0.1"; // redis所在IP地址
    	private static int port = 6379; // 端口号
    	private static String password = "master"; // 访问密码
    
    	// 控制一个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;
    
    	/**
    	 * 初始化Jedis连接池
    	 */
    	static {
    		try {
    			JedisPoolConfig config = new JedisPoolConfig();
    			config.setMaxIdle(MAX_IDLE);
    			config.setMaxWaitMillis(MAX_WAIT);
    			config.setTestOnBorrow(TEST_ON_BORROW);
    			jedisPool = new JedisPool(config, host, port, TIMEOUT, password);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 获取Jedis实例
    	 */
    	public synchronized static Jedis getJedis() {
    		try {
    			if (jedisPool != null) {
    				Jedis resource = jedisPool.getResource();
    				System.out.println("redis连接成功.........");
    				return resource;
    			} else {
    				return null;
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    
    	/**
    	 * 释放jedis资源
    	 */
    	public static void returnResource(final Jedis jedis) {
    		if (jedis != null) {
    			System.out.println("redis释放资源...........");
    			jedisPool.returnResource(jedis);
    		}
    	}
    
    	public static void main(String[] args) {
    		Jedis jedis = RedisUtil.getJedis();
    		System.out.println(jedis);
    		RedisUtil.returnResource(jedis);
    	}
    }

    Junit测试类 TestRedis.java

    public class TestRedis {
    
    	private Jedis jedis = null;
    
    	@Before
    	public void initRedis() {
    		jedis = RedisUtil.getJedis();
    	}
    
    	@After
    	public void clearRedis() {
    		RedisUtil.returnResource(jedis);
    	}
    
    	// redis操作字符串
    	@Test
    	public void testString() {
    		jedis.set("name", "aaron");
    		System.out.println("redis存储字符串:" + jedis.get("name"));
    
    		jedis.append("name", " is my name");// 拼接
    		System.out.println("redis拼接字符串:" + jedis.get("name"));
    
    		jedis.del("name"); // 删除某个键
    		System.out.println("redis删除字符串:" + jedis.get("name"));
    
    		// 设置多个键值对
    		jedis.mset("name", "tom", "age", "23", "tel", "18883455632");
    		jedis.incr("age");
    		System.out.println("设置多个键值对:" + jedis.get("name") + "-"
    				+ jedis.get("age") + "-" + jedis.get("tel"));
    	}
    
    	// redis操作Map
    	@Test
    	public void testMap() {
    		Map<String, String> map = new HashMap<String, String>();
    		map.put("name", "aaron");
    		map.put("age", "23");
    		map.put("email", "123@126.com");
    		jedis.hmset("user", map);
    		List<String> list = jedis.hmget("user", "name", "age", "email");
    		System.out.println("放到redis的map集合,打印出来的是list集合:" + list);
    		jedis.hdel("user", "age");// 删除map中的某个键值
    		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> iterator = jedis.hkeys("user").iterator();
    		while (iterator.hasNext()) {
    			String key = iterator.next();
    			System.out
    					.println("遍历结果集==" + key + ":" + jedis.hmget("user", key));
    		}
    	}
    
    	// jedis操作List
    	@Test
    	public void testList() {
    		jedis.del("java frameword");
    		System.out.println("移除后:" + jedis.lrange("java frameword", 0, -1));
    		// 先向key java framework中存放三条数据
    		jedis.lpush("java framework", "spring");
    		jedis.lpush("java framework", "struts");
    		jedis.lpush("java framework", "hibernate");
    
    		// 再取出所有数据jedis.lrange是按范围取出,
    		// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
    		System.out.println("取出key为java framework"
    				+ jedis.lrange("java framework", 0, -1));
    
    		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("name", "tom");
    		jedis.sadd("name", "aaron");
    		jedis.sadd("name", "jack");
    		jedis.sadd("name", "jeny");
    		
    		System.out.println("redis中set集合=="+jedis.smembers("name"));
    		jedis.srem("name", "jeny");
    		System.out.println("移除jeny数据记录后获取所有加入的value=="+jedis.smembers("name"));// 
    		System.out.println("判断jeny是否是name集合中的元素=="+jedis.sismember("name", "jeny"));
    		System.out.println("随机获取redis中的key为name的数据=="+jedis.srandmember("name"));
    		System.out.println("返回集合的元素个数 =="+jedis.scard("name"));
    	}
    }
    
  • 相关阅读:
    Python3 tkinter基础 Radiobutton variable 默认选中的按钮
    oracle函数NVL,NVL2和NULLIF之间的区别和使用
    js如何返回两个数的商的整数和余数部分?
    解决win10打开组策略弹出管理模板对话框问题
    asp.net mvc中动作方法的重定向
    asp.net mvc如何获取url的相关信息
    vs2015如何使用附加进程调试发布在IIS上项目
    未能加载文件或程序集“Oracle.DataAccess”或它的某一个 依赖项。如何解决?
    C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入
    oracle中计算两个日期的相差天数、月数、年数、小时数、分钟数、秒数等
  • 原文地址:https://www.cnblogs.com/haaron/p/5329526.html
Copyright © 2011-2022 走看看