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
---------------------------------------------

posted @ 2019-03-02 16:22  Daxi33  阅读(228)  评论(0编辑  收藏  举报