天天看点

Redis学习笔记(二)常用指令和Java连接操作

一、Redis mac可视化工具

二、redis常见指令学习

1.Reids list 学习  2.Reids hash 学习  3.Reids 字符串    4.Reids  Set类型   5.Reids  Sorted-set类型

三、java连接操作

一、Redis mac可视化工具

推荐一款mac上的redis的可视化工具redis-desktop-manager

下载地址:链接:https://pan.baidu.com/s/1LrK4HCY2ndzwfSP15jiEiw  密码:9i3i

Redis学习笔记(二)常用指令和Java连接操作

二、redis常见指令学习

 Redis的数据类型

 字符串列表(list)、哈希(hash)、字符串(String)、字符串集合(set)、有序字符集合(sorted set)

 1.redis list 学习

//左端插入数据
127.0.0.1:6379> lpush mylist abc 
(integer) 1

//右端插入数据
127.0.0.1:6379> rpush mylist2 123
(integer) 1

//查询数据 注意这里的-1指的是末尾的第一个元素
127.0.0.1:6379> lrange mylist 0 -1
1) "abc"

//弹出该元素  注意弹出后则没有该元素
127.0.0.1:6379> lpop mylist     //还有右端弹出rpop mylist
"abc"
127.0.0.1:6379> lrange mylist 0 -1
(empty list or set)

//查看长度
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> llen mylist
(integer) 3


//删除元素  
//lrem mylist 2 c //从头到位删除两个c
//lrem mylist -2 c //从尾到头删除两个c
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "c"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lrem mylist 2 c //从头到位删除两个c
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "b"
4) "a"


//设置值 
//指定某个位置添加元素
127.0.0.1:6379> lset mylist 3 mmm
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "b"
4) "mmm"

//插入值
//linsert mylist before b 11 在第一个b之前插入11
//linsert mylist after b 11  在第一个b之后插入11
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "b"
4) "mmm"
127.0.0.1:6379> linsert mylist before b 11
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "11"
4) "b"
5) "mmm"

//lpushx mylist x
//将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。
//当 key 不存在时, lpushx命令什么也不做
           

 2.redis hash 学习

每一个hash可以存储4294967295个键值对。

//赋值
//hset key field value
127.0.0.1:6379> hset myhash username xiangzaixiansheng
(integer) 0
127.0.0.1:6379> hset myhash age 18
(integer) 0

//多个赋值
//hmset key field value [field value ...]
127.0.0.1:6379> hmset myhash2 username malatang age 21
OK

//取值
127.0.0.1:6379> hget myhash username
"xiangzaixiansheng"

//全部取出
127.0.0.1:6379> hgetall myhash
"xiangzaixiansheng"

//多个取值
127.0.0.1:6379> hmget myhash username age
1) "xiangzaixiansheng"
2) "18"

//删除  或者使用 del myhash2
127.0.0.1:6379> hdel myhash2 username age
(integer) 2


//增加(增加某个数值的大小)
127.0.0.1:6379> hincrby myhash age 5
(integer) 23


//判断存在,如果存在则返回1
127.0.0.1:6379> hexists myhash username
(integer) 1

//获取所有属性值
127.0.0.1:6379> hkeys myhash
1) "username"
2) "age"
127.0.0.1:6379> hvals myhash
1) "xiangzaixiansheng"
2) "23"

           

3.Reids 字符串

//赋值 
//set key value [EX seconds] [PX milliseconds] [NX|XX]
 
127.0.0.1:6379> set company redis
 OK

//取值
//get key
127.0.0.1:6379> get company
"redis"

//删除
127.0.0.1:6379> del company
(integer) 1

//更改 先取值后更改数值
127.0.0.1:6379> getset company apple
"redis"
127.0.0.1:6379> get company
"apple"

//数值增加  如果没有num的话先将num的值为0然后加1.如果不是整形会报错
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"

//数值减少
127.0.0.1:6379> decr num
(integer) 0

//指定增加
127.0.0.1:6379> incrby num 5
(integer) 5

//指定减少
127.0.0.1:6379> decrby num 2
(integer) -2

//追加一个字符串
127.0.0.1:6379> get company
"apple"
127.0.0.1:6379> append company xiangzaixiansheng
(integer) 22
127.0.0.1:6379> get company
"applexiangzaixiansheng"
           

4.Reids  Set类型

需要注意的set不可以出现重复元素。并且可以很方便的对集合进行聚合操作。

主要使用场景:带有唯一性的场景.

//添加
127.0.0.1:6379> sadd myset a b c
(integer) 3

//删除
127.0.0.1:6379> srem myset a
(integer) 1
127.0.0.1:6379> smembers myset
1) "c"
2) "b"

//查看数据
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "a"

//判断是否有某个元素  sismember key member
//判断c 在不在myset中
127.0.0.1:6379> sismember myset c
(integer) 1

//差集运算(与key的顺序有关) sdiff key [key ...]
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smembers myset2
1) "12"
2) "c"
127.0.0.1:6379> sdiff myset myset2
1) "b"

//交集运算  sinter key [key ...]
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smembers myset2
1) "12"
2) "c"
127.0.0.1:6379> sinter myset myset2
1) "c"

//并集运算 sunion key [key ...]
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smembers myset2
1) "12"
2) "c"
127.0.0.1:6379> sunion myset myset2
1) "12"
2) "c"
3) "b"

//获取成员数量
127.0.0.1:6379> scard myset
(integer) 2

//随机返回集合中的成员
127.0.0.1:6379> srandmember myset
"b"
127.0.0.1:6379> srandmember myset
"c"

//两个集合相差的,存到另一个集合   注意:是把myset和myset1相差的元素存到mmset
127.0.0.1:6379> sdiffstore mmset myset myset1
(integer) 2
127.0.0.1:6379> smembers mmset
1) "c"
2) "b"

//两个集合的交集存在另一个集合
127.0.0.1:6379> sinterstore mmmset myset myset1
(integer) 0


//两个元素的并集存到另一个集合
127.0.0.1:6379> sunionstore my3 myset myset1
(integer) 2
127.0.0.1:6379> smembers my3
1) "c"
2) "b"
           

5.Reids  Sorted-set类型

Sorted-set中的成员在集合中的位置是有序的。

应用场景:游戏排行榜、积分排行榜、构建索引数据等

//添加元素 zadd key [NX|XX] [CH] [INCR] score member [score member ...]
//我们向mysort中插入三组数据
127.0.0.1:6379> zadd mysort 70 lm 80 wh 90 xiangzai
(integer) 3

//获取元素 zscore key member
127.0.0.1:6379> zscore mysort xiangzai
"90"

//获取集合中的数据数量
127.0.0.1:6379> zcard mysort
(integer) 3


//查找范围
//查找从头到尾
127.0.0.1:6379> zrange mysort 0 -1
1) "lm"
2) "wh"
3) "xiangzai"
//加上关键字withscores把分数也打印出来
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"
3) "wh"
4) "80"
5) "xiangzai"
6) "90"

//从大到小 进行范围扫描
127.0.0.1:6379> zrevrange mysort 0 -1 withscores
1) "xiangzai"
2) "90"
3) "wh"
4) "80"
5) "lm"
6) "70"

//删除元素
//删除lm
127.0.0.1:6379> zrem mysort lm
(integer) 1
127.0.0.1:6379> zrevrange mysort 0 -1 withscores
1) "xiangzai"
2) "90"
3) "wh"
4) "80"

//按范围删除 zremrangebyrank key start stop
127.0.0.1:6379> zremrangebyrank mysort 0 4
(integer) 2

//按分数删除 删除80到100之间
127.0.0.1:6379> zadd mysort 70 lm 80 wh 90 xiangzai
(integer) 0
127.0.0.1:6379> zremrangebyscore mysort 80 100
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"

//从小到大显示 (指定范围,只显示2个)
127.0.0.1:6379> zadd mysort 70 lm 80 wh 90 xiangzai
(integer) 2
127.0.0.1:6379> zrangebyscore mysort 0 100 withscores limit 0 2
1) "lm"
2) "70"
3) "wh"
4) "80"

//给指定元素增加  zincrby key increment member
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"
3) "wh"
4) "80"
5) "xiangzai"
6) "90"
127.0.0.1:6379> zincrby mysort 5 xiangzai
"95"
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"
3) "wh"
4) "80"
5) "xiangzai"
6) "95"
//查看80-90分之间的个数
127.0.0.1:6379> zcount mysort 80 90
(integer) 1
           

三、java连接操作

1.使用Jedis直接连接方法

public class TestJedis {
	public static void main(String[] args) {
	// TODO Auto-generated method stub
	Jedis jedis = new Jedis("127.0.0.1",6379);
        // jedis.auth("1234");
        //连接
        jedis.connect();
        //列出符合特定条件的key   其中pattern为匹配条件,填*则为列出所有
        Set<String> keyList = jedis.keys("*");
        //foreach,将keyList的值,赋值于key,并打印,之后,下个keyList值,赋值于key并打印,以此类推,到最后,打印完,自动出"for(){}"往下运行
        for(String key : keyList) {
	      System.out.println(key);
        }
        //关闭连接
       jedis.disconnect();
	}
}
           

打印出来的值

Redis学习笔记(二)常用指令和Java连接操作

2.JedisPool连接

public void testJedisPool() {
		/**
		 * Jedis连接池管理方式连接Redis步骤:
		1、导入包(jedis-3.1.0.jar和commons-pool2-2.6.2.jar)
		2、获得连接池配置对象JedisPoolConfig
		3、设置连接池信息(最大连接数、最大空闲连接数、最小空闲连接数等)
		4、获得连接池(new JedisPool(GenericObjectPoolConfig poolConfig,String host,int port))  
		5、获得核心对象Jedis
		6、用Jedis操作Redis数据并取得结果
		7、关闭Jedis连接,关闭JedisPool连接池,释放资源
		 */
		//创建连接池配置对象
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxTotal(25);//设置最大连接数
		config.setMaxIdle(20);
		config.setMinIdle(5);
		JedisPool pool = new JedisPool(config, "127.0.0.1", 6379);
		//获取核心对象
		Jedis jedis = pool.getResource();
		//验证redis密码,如果没有设置密码这段可以省略
		//jedis.auth("1234");//登录
	     jedis.select(0);//选择DB0数据库
	     Set<String> keyList = jedis.keys("*");
        
		//遍历map元素
		for(String key : keyList){
			//jedis.type(String key)返回给定key所储存的值的类型。 none(key不存在),string(字符串),list(列表),set(集合),zset(有序集),hash(哈希表) 
			System.out.println("key=="+key+",type="+jedis.type(key));
		    
           //取出map元素	
           if(jedis.type(key).equals("hash")) {
			System.out.println("Hashvalue=" + jedis.hgetAll(key));
			//取出全部
			Map<String,String> map = jedis.hgetAll(key);
			Set<String> set = map.keySet();
			Iterator<String> iterator = set.iterator();
			while(iterator.hasNext()){
				String field = iterator.next();
				System.out.println(field+"===="+map.get(field));
				}
			}
		}else if(jedis.type(key).equals("list")) {
				//查询元素
				System.out.println("List value =         " + jedis.lrange(key, 0, -1));
				//查询当前list的长度
				System.out.println("List的length函数===" + jedis.llen(key));
				//遍历元素
				List<String> list = jedis.lrange(key, 0, jedis.llen(key) - 1);
				for(String keys:list){
					System.out.println("List value = " + keys);
				}
		}else if(jedis.type(key).equals("set")) {
				System.out.println("Set value=         " + jedis.smembers(key));
				Set<String> set = jedis.smembers(key);
				for(String sets : set) {
					System.out.println("Set value =" + sets);					
				}else if(jedis.type(key).equals("zset")) {
				Set<Tuple> setsSet = jedis.zrangeWithScores(key, 0, jedis.zcard(key) - 1);
				System.out.println("Set value =" + setsSet);
				
			}
			}

		
		jedis.close();
		pool.close();
		
	}