redis使用
使用redis时一定要记得redis是一个高性能的key-value数据库。不要用关系型数据库的思维去使用它。
redis中的数据只有key和value之间的对应,数据类型更没有关系型数据库中常用的int,float,char等类型
而是类似于java中的对象数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
理解这些对使用redis很重要。
redis中能通过index获取list中的值,但是不能通过指定的值获取index号。
所以redis中获取排序最好用的类型就是sort set有序集合 ,或者是hash
1、查看当前数据库的所有数据,也就是所有的键key:keys *
127.0.0.1:6379> keys * 1) "users"
2、查看某个键的类型:type key
127.0.0.1:6379> type users zset
3、选择数据库,默认数据库0,默认有16个数据库,选择:select n
127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]>
4、查看当前连接数量,info clients
127.0.0.1:6379> info clients # Clients connected_clients:1 client_recent_max_input_buffer:2 client_recent_max_output_buffer:0 blocked_clients:0
5、查看具体的连接情况,client list
127.0.0.1:6379> client list id=50621 addr=127.0.0.1:43110 fd=11 name= age=4663 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client id=50922 addr=127.0.0.1:44254 fd=8 name= age=11 idle=11 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=NULL id=50923 addr=127.0.0.1:44256 fd=9 name= age=11 idle=11 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=NULL id=50924 addr=127.0.0.1:44258 fd=10 name= age=11 idle=11 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=NULL
6、查看数据库最大连接数,config get maxclients
127.0.0.1:6379> config get maxclients 1) "maxclients" 2) "10000"
7、获取redis数据文件目录(没有设置的话就在启动redis的脚本所在的目录),config get dir
127.0.0.1:6379> config get dir 1) "dir" 2) "/home/ec2-user"
(1)、使用sorted set,不允许重复,比set多了一个score,score的值可重复且是double类型,可使用score来排序
Set<Tuple> h = jedis.zrangeWithScores("history", 0, -1);
for(Tuple t : h){
System.out.println(t.getElement()+"score is "+t.getScore());
}
Set<String> e = jedis.zrange("history", 0, -1);
for(String a :e){
System.out.println(a+" score is "+jedis.zscore("history", a));
}两种方法的结果是一样的,都是取出有序集合中的member和score
mysqlscore is 1.0
redisscore is 2.0
oraclescore is 3.0
mysql score is 1.0
redis score is 2.0
oracle score is 3.0
(2)、使用string
jedis.set("wnc_count", "1");
System.out.println("wnc count is "+jedis.get("wnc_count"));
for(int i=0;i<5;i++){
jedis.incr("wnc_count");
}String中的value如果是数字,redis可以自动识别,使用incr命令可以递增数值:
wnc count is 1
After five increment ,wnc count is 6
(3)、使用list,里面的值可以有重复。
jedis.lpush("query_list", "01","05","off");
List<String> list1 = jedis.lrange("query_list", 0, -1);
for(String code : list1){
System.out.println(" Begin ,query history is : "+code);
}
jedis.lpush("query_list", "18");
jedis.lpush("query_list", "41");
jedis.lpush("query_list", "90");
List<String> list2 = jedis.lrange("query_list", 0, 2);
for(String code : list2){
System.out.println("End ,query history is : "+code);
}lpush把最新的值放在最左边,读取时也是从左读,结果是:
Begin ,query history is : off
Begin ,query history is : 05
Begin ,query history is : 01
End ,query history is : 90
End ,query history is : 41
End ,query history is : 18
End ,query history is : off
End ,query history is : 05
(4)、使用set,无序,不可重复,适合随机读取。和list的区别就是不可重复和无序
jedis.sadd("QQ", "你好","hello","你好","thanks","你好","多谢","你好","再见");
Set<String> content = jedis.smembers("QQ");
for(String str : content){
System.out.println("qq contents is : "+str);
}
System.out.println("random content is : "+jedis.srandmember("QQ"));随机读取的功能可以用来做碎语,代码结果为:
qq contents is : 你好
qq contents is : 多谢
qq contents is : hello
qq contents is : thanks
qq contents is : 再见
random content is : 多谢
(5)、使用hash,hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
HashMap<String, String> hash = new HashMap<>();
hash.put("清华", "100");
hash.put("北大", "100");
hash.put("牛津", "99");
jedis.hmset("map", hash);
HashMap<String, String> college = (HashMap<String, String>) jedis.hgetAll("map");
Iterator iter = college.entrySet().iterator();while (iter.hasNext()) {
Map.Entry<String, String> entry = (Entry<String, String>) iter.next();
System.out.println("大学 :" + entry.getKey() + " 评分 :" + entry.getValue());
System.out.println("大学 :" + entry.getKey() + " 评分 :" + jedis.hget("map", entry.getKey()));
System.out.println("---------------------------------------------");
}类似于java的hashmap,提取数据时当然就要用hashmap来存储,遍历也就是遍历hashmap,结果是:
大学 :牛津 评分 :99
大学 :牛津 评分 :99
---------------------------------------------
大学 :清华 评分 :100
大学 :清华 评分 :100
---------------------------------------------
大学 :北大 评分 :100
大学 :北大 评分 :100
---------------------------------------------