Reids笔记

Posted Aaron殇醉月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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", "[email protected]");
		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"));
	}
}

 

以上是关于Reids笔记的主要内容,如果未能解决你的问题,请参考以下文章

Redis个人笔记:Redis应用场景,Redis常见命令,Reids缓存击穿穿透,Redis分布式锁实现方案,秒杀设计思路,Redis消息队列,Reids持久化,Redis主从哨兵分片集群

Redis面试高频45题笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

reids(缓存,reids下载,安装 测试)

Reids集群安装

windows安装Reids

windows安装reids