使用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 userszset
3、选择数据库,默认数据库0,默认有16个数据库,选择:select n
127.0.0.1:6379> select 1OK127.0.0.1:6379[1]>
4、查看当前连接数量,info clients
127.0.0.1:6379> info clients# Clientsconnected_clients:1client_recent_max_input_buffer:2client_recent_max_output_buffer:0blocked_clients:0
5、查看具体的连接情况,client list
127.0.0.1:6379> client listid=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=clientid=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=NULLid=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=NULLid=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 maxclients1) "maxclients"2) "10000"
7、获取redis数据文件目录(没有设置的话就在启动redis的脚本所在的目录),config get dir
127.0.0.1:6379> config get dir1) "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.0redisscore is 2.0oraclescore is 3.0mysql score is 1.0redis score is 2.0oracle 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 1After 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 : offBegin ,query history is : 05Begin ,query history is : 01End ,query history is : 90End ,query history is : 41End ,query history is : 18End ,query history is : offEnd ,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 : helloqq contents is : thanksqq 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---------------------------------------------