Redis的简单使用和介绍

1、什么是NoSQL
    NoSQL   =   Not Only  SQL
    非关系型的数据库
    
2、 为什么需要NoSQL
    High performance  高并发读写
    Huge Storage      海量数据的高效率存储和访问
    High Scalability && High Availability   高可扩展性和高可用性
    
3、NoSQL数据库的四大分类
    键值(Key-Value)存储
    列存储
    文档数据库
    图形数据库
    
4、NoSQL的特点
    易扩展
    灵活的数据模型
    大数据量,高性能
    高可用
    
5、Redis高性能键值对数据库,支持的键值数据类型
    字符串类型
    列表类型
    有序集和类型
    散列类型
    集合类型
    
6、Redis的应用场景
    缓存
    任务队列
    网站访问统计
    应用排行榜
    数据过期处理
    分布式集群架构中的session分离
    
7、redis基本操作
    进入redis:redis-cli
    存储:set name value
    取值: get name
    查看所有的键:keys *
    删除键值对:del name
    
8、Jedis入门
    Jedis是Redis官方首选的Java客户端开发包
    http://github.com/xetorthio/jedis
    
9、java使用Jedis
 1 package com.jedis.test;
 2 
 3 import redis.clients.jedis.Jedis;
 4 
 5 /**
 6  * Created by Administrator on 2017-07-13.
 7  */
 8 public class JedisDemo1 {
 9     /**
10      * 单实例测试
11      */
12     public static void main(String[] args) {
13         //设置IP地址和端口
14         Jedis jedis=new Jedis("192.168.21.195",6379);
15         //保存数据
16         jedis.set("name","lu");
17         //获取数据
18         String value=jedis.get("name");
19         System.out.println("name对应的:"+value);
20         //释放资源
21         jedis.close();
22     }
23 }
jedis单实例测试
 1 package com.jedis.test;
 2 
 3 
 4 import redis.clients.jedis.Jedis;
 5 import redis.clients.jedis.JedisPool;
 6 import redis.clients.jedis.JedisPoolConfig;
 7 
 8 import java.util.Date;
 9 
10 /**
11  *连接池的方式连接
12  */
13 public class JedisDemo2 {
14     public static void main(String[] args) {
15         //获取连接池的配置
16         JedisPoolConfig config = new JedisPoolConfig();
17         //设置最大连接数
18         config.setMaxTotal(30);
19         //设置最大空闲连接数
20         config.setMaxIdle(10);
21         //获得连接池
22         JedisPool jedisPool=new JedisPool(config,"192.168.21.195",6379);
23         //获得核心对象
24         Jedis jedis=null;
25         try {
26             //通过连接池获得连接
27             jedis=jedisPool.getResource();
28             //设置数据
29             jedis.set("name","张三");
30             //获取数据
31             String value = jedis.get("name");
32             System.out.println("name对应的value:"+value);
33         }catch (Exception e){
34             e.printStackTrace();
35         }finally {
36             if (jedis!=null){
37                 jedis.close();
38             }
39             if (jedisPool!=null){
40                 jedisPool.close();
41             }
42         }
43     }
44 
45 }
jedis连接池方式连接

 

10、Redis5种数据类型
    字符串(String)
    字符串列表(list)
    有序字符串集合(sorted set)
    哈希(hash)
    字符串集合(set)
    
11、key定义的注意点;
    不要过长
    不要过短
    统一的命名规范
    
12、存储String
    二进制安全的,存入和获取的数据相同
    Value最多可以容纳的数据长度是512M
 
13、存储String常用命令
    赋值
    取值
    删除
    扩展命令
    取值增减
redis 127.0.0.1:6379> set company lu
OK
redis 127.0.0.1:6379> get company
"lu"
redis 127.0.0.1:6379> getset company baidu
"lu"
redis 127.0.0.1:6379> get company
"baidu"
redis 127.0.0.1:6379> del company
(integer) 1
redis 127.0.0.1:6379> get company
(nil)
redis 127.0.0.1:6379> incr num
(integer) 1
redis 127.0.0.1:6379> get num
"1"
redis 127.0.0.1:6379> incr num
(integer) 2
redis 127.0.0.1:6379> get num
"2"
redis 127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> decr num
(integer) 1
redis 127.0.0.1:6379> decr num2
(integer) -1
redis 127.0.0.1:6379> incrby num 5
(integer) 6
redis 127.0.0.1:6379> incrby num3 5
(integer) 5
redis 127.0.0.1:6379> decrby num3 2
(integer) 3
redis 127.0.0.1:6379> append num 5
(integer) 2
redis 127.0.0.1:6379> get num
"65"
redis 127.0.0.1:6379> append num4 4
(integer) 1
redis 127.0.0.1:6379> get num4
"4"
存储String常用命令

13、存储Hash
    
String Key和String Value的map容器
    每一个Hash可以存储4294967295个键值对


    储存Hash常用命令:
        赋值
        取值删除增加数字
        自学命令

 

 1 redis 127.0.0.1:6379> hset myhash username jack
 2 (integer) 1
 3 redis 127.0.0.1:6379> hset myhash age 18
 4 (integer) 1
 5 redis 127.0.0.1:6379> hmset myhash2 username rose age 21
 6 OK
 7 redis 127.0.0.1:6379> hget myhash username
 8 "jack"
 9 redis 127.0.0.1:6379> hget myhash age
10 "18"
11 redis 127.0.0.1:6379> hmget myhash username age
12 1) "jack"
13 2) "18"
14 redis 127.0.0.1:6379> hgetall myhash
15 1) "username"
16 2) "jack"
17 3) "age"
18 4) "18"
19 redis 127.0.0.1:6379> hdel myhash2 username
20 (integer) 1
21 redis 127.0.0.1:6379> hgetall myhash2
22 1) "age"
23 2) "21"
24 redis 127.0.0.1:6379> del myhash2
25 (integer) 1
26 redis 127.0.0.1:6379> hgetall myhash2
27 (empty list or set)
28 redis 127.0.0.1:6379> hincrby myhash age 5
29 (integer) 23
30 redis 127.0.0.1:6379> hexists myhash username
31 (integer) 1
32 redis 127.0.0.1:6379> hexists myhash password
33 (integer) 0
34 redis 127.0.0.1:6379> hlen myhash
35 (integer) 2
36 redis 127.0.0.1:6379> hkeys myhash
37 1) "username"
38 2) "age"
39 redis 127.0.0.1:6379> hvalues myhash
40 (error) ERR unknown command 'hvalues'
41 redis 127.0.0.1:6379> hvals myhash
42 1) "jack"
43 2) "23"
存储Hash常用命令

 

14、存储list
    ArrayList使用数组方式
    LinkedList使用双向链接方式
    双向链表中增加数据
    双向链表中删除数据
    
    存储list常用命令:
        两端添加
        两端弹出
        扩展命令
        查看列表
        获取列表元素个数

  1 redis 127.0.0.1:6379> lpush mylist a b c
  2 (integer) 3
  3 redis 127.0.0.1:6379> lpush mylist 1 2 3
  4 (integer) 6
  5 redis 127.0.0.1:6379> rpush mylist2 a b c
  6 (integer) 3
  7 redis 127.0.0.1:6379> rpush mylist2 1 2 3
  8 (integer) 6
  9 redis 127.0.0.1:6379> lrange mylist 0 5 
 10 1) "3"
 11 2) "2"
 12 3) "1"
 13 4) "c"
 14 5) "b"
 15 6) "a"
 16 redis 127.0.0.1:6379> lrange mylist2 0 -1
 17 1) "a"
 18 2) "b"
 19 3) "c"
 20 4) "1"
 21 5) "2"
 22 6) "3"
 23 redis 127.0.0.1:6379> lrange mylist2 0 -2
 24 1) "a"
 25 2) "b"
 26 3) "c"
 27 4) "1"
 28 5) "2"
 29 redis 127.0.0.1:6379> lpop mylist
 30 "3"
 31 redis 127.0.0.1:6379> lrange mylist 0 -1
 32 1) "2"
 33 2) "1"
 34 3) "c"
 35 4) "b"
 36 5) "a"
 37 redis 127.0.0.1:6379> rpop mylist 
 38 "a"
 39 redis 127.0.0.1:6379> lrange mylist2 0 -1
 40 1) "a"
 41 2) "b"
 42 3) "c"
 43 4) "1"
 44 5) "2"
 45 6) "3"
 46 redis 127.0.0.1:6379> rpop mylist2 
 47 "3"
 48 redis 127.0.0.1:6379> rpop mylist2 
 49 "2"
 50 redis 127.0.0.1:6379> lrange mylist2 0 -1
 51 1) "a"
 52 2) "b"
 53 3) "c"
 54 4) "1"
 55 redis 127.0.0.1:6379> llen mylist
 56 (integer) 4
 57 redis 127.0.0.1:6379> llen mylist2
 58 (integer) 4
 59 redis 127.0.0.1:6379> llen mylist3
 60 (integer) 0
 61 redis 127.0.0.1:6379> lpushx mylist x
 62 (integer) 5
 63 redis 127.0.0.1:6379> lrange mylist 0 -1
 64 1) "x"
 65 2) "2"
 66 3) "1"
 67 4) "c"
 68 5) "b"
 69 redis 127.0.0.1:6379> lpushx mylist3 x
 70 (integer) 0
 71 redis 127.0.0.1:6379> rpushx mylist2 x
 72 (integer) 5
 73 redis 127.0.0.1:6379> lrange mylist2
 74 (error) ERR wrong number of arguments for 'lrange' command
 75 redis 127.0.0.1:6379> lrange mylist2 0 -1
 76 1) "a"
 77 2) "b"
 78 3) "c"
 79 4) "1"
 80 5) "x"
 81 redis 127.0.0.1:6379> lpush mylist3 1 2 3
 82 (integer) 3
 83 redis 127.0.0.1:6379> lpush mylist3 1 2 3
 84 (integer) 6
 85 redis 127.0.0.1:6379> lpush mylist3 1 2 3
 86 (integer) 9
 87 redis 127.0.0.1:6379> lrange mylist3 0 -1
 88 1) "3"
 89 2) "2"
 90 3) "1"
 91 4) "3"
 92 5) "2"
 93 6) "1"
 94 7) "3"
 95 8) "2"
 96 9) "1"
 97 redis 127.0.0.1:6379> lrem mylist3 2 3
 98 (integer) 2
 99 redis 127.0.0.1:6379> lrange mylist3 0 -1
100 1) "2"
101 2) "1"
102 3) "2"
103 4) "1"
104 5) "3"
105 6) "2"
106 7) "1"
107 redis 127.0.0.1:6379> lrem mylist3 -2 1
108 (integer) 2
109 redis 127.0.0.1:6379> lrange mylist3 0 -1
110 1) "2"
111 2) "1"
112 3) "2"
113 4) "3"
114 5) "2"
115 redis 127.0.0.1:6379> lrem mylist3 0 2
116 (integer) 3
117 redis 127.0.0.1:6379> lrange mylist3 0 -1
118 1) "1"
119 2) "3"
120 redis 127.0.0.1:6379> lrange mylist 0 -1
121 1) "x"
122 2) "2"
123 3) "1"
124 4) "c"
125 5) "b"
126 redis 127.0.0.1:6379> lset mylist 3 mmm
127 OK
128 redis 127.0.0.1:6379> lrange mylist 0 -1
129 1) "x"
130 2) "2"
131 3) "1"
132 4) "mmm"
133 5) "b"
134 redis 127.0.0.1:6379> lpush mylist4 a b c 
135 (integer) 3
136 redis 127.0.0.1:6379> lpush mylist4 a b c 
137 (integer) 6
138 redis 127.0.0.1:6379> lrange mylist4 0 -1
139 1) "c"
140 2) "b"
141 3) "a"
142 4) "c"
143 5) "b"
144 6) "a"
145 redis 127.0.0.1:6379> linsert mylist4 before b 11
146 (integer) 7
147 redis 127.0.0.1:6379> lrange mylist4 0 -1
148 1) "c"
149 2) "11"
150 3) "b"
151 4) "a"
152 5) "c"
153 6) "b"
154 7) "a"
155 redis 127.0.0.1:6379> linsert mylist4 after b 22
156 (integer) 8
157 redis 127.0.0.1:6379> lrange mylist4 0 -1
158 1) "c"
159 2) "11"
160 3) "b"
161 4) "22"
162 5) "a"
163 6) "c"
164 7) "b"
165 8) "a"
166 redis 127.0.0.1:6379> lpush mylist5 1 2 3
167 (integer) 3
168 redis 127.0.0.1:6379> lpush mylist6 a b c
169 (integer) 3
170 redis 127.0.0.1:6379> rpoplpush mylist5 mylist6
171 "1"
172 redis 127.0.0.1:6379> lrange mylist5 0 -1
173 1) "3"
174 2) "2"
175 redis 127.0.0.1:6379> lrange mylist6 0 -1
176 1) "1"
177 2) "c"
178 3) "b"
179 4) "a"
存储list常用命令

15、存储Set
    和List类型不同的是,Set集合中不允许出现重复的元素
        
    存储set常用命令:
        添加/删除元素
        获得集合中的元素
        集合中的差集运算
        集合中的交集运算
        集合中的并集运算
        扩展命令   

 1 redis 127.0.0.1:6379> sadd myset a b c
 2 (integer) 3
 3 redis 127.0.0.1:6379> sadd myset a
 4 (integer) 0
 5 redis 127.0.0.1:6379> sadd myset 1 2 3
 6 (integer) 3
 7 redis 127.0.0.1:6379> srem myset 1 2
 8 (integer) 2
 9 redis 127.0.0.1:6379> smembers myset
10 1) "3"
11 2) "c"
12 3) "a"
13 4) "b"
14 redis 127.0.0.1:6379> sismember myset a
15 (integer) 1
16 redis 127.0.0.1:6379> sismember myset 6
17 (integer) 0
18 redis 127.0.0.1:6379> saaa mya1 a b c
19 (error) ERR unknown command 'saaa'
20 redis 127.0.0.1:6379> sadd mya1 a b c
21 (integer) 3
22 redis 127.0.0.1:6379> sadd mya2 a c 1 2
23 (integer) 4
24 redis 127.0.0.1:6379> sdiff mya1 mya2
25 1) "b"
26 redis 127.0.0.1:6379> sinter mya1 mya2
27 1) "c"
28 2) "a"
29 redis 127.0.0.1:6379> sunion mya1 mya2
30 1) "1"
31 2) "a"
32 3) "b"
33 4) "c"
34 5) "2"
35 redis 127.0.0.1:6379> smembers myset
36 1) "3"
37 2) "c"
38 3) "a"
39 4) "b"
40 redis 127.0.0.1:6379> scard myset
41 (integer) 4
42 redis 127.0.0.1:6379> srandmember myset
43 "a"
44 redis 127.0.0.1:6379> srandmember myset
45 "a"
46 redis 127.0.0.1:6379> srandmember myset
47 "3"
48 redis 127.0.0.1:6379> sdiffstore my1  mya1 mya2 
49 (integer) 1
50 redis 127.0.0.1:6379> smembers my1
51 1) "b"
52 redis 127.0.0.1:6379> sinterstore my2 mya1 mya2
53 (integer) 2
54 redis 127.0.0.1:6379> smembers my2
55 1) "c"
56 2) "a"
57 redis 127.0.0.1:6379> sunionstore my3 mya1 mya2
58 (integer) 5
59 redis 127.0.0.1:6379> smembers my3
60 1) "1"
61 2) "a"
62 3) "b"
63 4) "c"
64 5) "2"
储存Set常用命令

    存储Set使用场景
        跟踪一些唯一性数据
        用于维护数据对象之间的关联关系

16、存储Sorted-Set
    Sorted-Set中的成员在集合中的位置是有序的
    
    存储Sorted-Set常用命令:
        添加元素
        删除元素
        获得元素
        范围查询
        扩展命令 

 1 redis 127.0.0.1:6379> zadd mysort 70 zs 80 ls 90 ww
 2 (integer) 3
 3 redis 127.0.0.1:6379> zadd mysort zs
 4 (error) ERR wrong number of arguments for 'zadd' command
 5 redis 127.0.0.1:6379> zadd mysort 100 zs
 6 (integer) 0
 7 redis 127.0.0.1:6379> zadd mysort 60 tom
 8 (integer) 1
 9 redis 127.0.0.1:6379> zscore mysort zs
10 "100"
11 redis 127.0.0.1:6379> zcard mysort
12 (integer) 4
13 redis 127.0.0.1:6379> zrem mysort tom ww
14 (integer) 2
15 redis 127.0.0.1:6379> zcard mysort
16 (integer) 2
17 redis 127.0.0.1:6379> zadd mysort 85 jack 95 rose
18 (integer) 2
19 redis 127.0.0.1:6379> zrange mysort 0 -1
20 1) "ls"
21 2) "jack"
22 3) "rose"
23 4) "zs"
24 redis 127.0.0.1:6379> zrange mysort 0 -1 withscores
25 1) "ls"
26 2) "80"
27 3) "jack"
28 4) "85"
29 5) "rose"
30 6) "95"
31 7) "zs"
32 8) "100"
33 redis 127.0.0.1:6379> zrevrange mysort 0 -1 withscores
34 1) "zs"
35 2) "100"
36 3) "rose"
37 4) "95"
38 5) "jack"
39 6) "85"
40 7) "ls"
41 8) "80"
42 redis 127.0.0.1:6379> zremrangebyrank mysort 0 4
43 (integer) 4
44 redis 127.0.0.1:6379> zrevrange mysort 0 -1 withscores
45 (empty list or set)
46 redis 127.0.0.1:6379> zadd mysort 80 zs 90 ls 100 ww
47 (integer) 3
48 redis 127.0.0.1:6379> zremrangebyscore mysort 80 100
49 (integer) 3
50 redis 127.0.0.1:6379> zrevrange mysort 0 -1 withscores
51 (empty list or set)
52 redis 127.0.0.1:6379> zadd mysort 70 zs 80 ls 90 ww
53 (integer) 3
54 redis 127.0.0.1:6379> zrangebyscore mysort 0 100
55 1) "zs"
56 2) "ls"
57 3) "ww"
58 redis 127.0.0.1:6379> zrangebyscore mysort 0 100 withscore
59 (error) ERR syntax error
60 redis 127.0.0.1:6379> zrangebyscore mysort 0 100 withscores
61 1) "zs"
62 2) "70"
63 3) "ls"
64 4) "80"
65 5) "ww"
66 6) "90"
67 redis 127.0.0.1:6379> byscore mysort 0 100 withscores limit 0 2
68 1) "zs"
69 2) "70"
70 3) "ls"
71 4) "80"
72 redis 127.0.0.1:6379> zincrby mysort 3 ls
73 "83"
74 redis 127.0.0.1:6379> zscore mysort ls
75 "83"
76 redis 127.0.0.1:6379> zcount mysort 80 90
77 (integer) 2
Sorted-Set常用命令

    Sorted-Set使用场景
        大型在线游戏积分排行榜
        构建索引数据

17、Redis特性
    切换数据库
        select 0
    移动key到某一个数据库
        move key 1
    开启事务
        multi
    提交事务
        exec
    回滚事务
        discard

18、Redis持久化
    持久化方式:
        RDB方式(配置以多少秒将数据储存到硬盘)
        AOF方式(读取日志文件)
        无持久化(缓存方式)
        同时使用RDB和AOF

posted @ 2017-07-13 17:06  羽哲  阅读(278)  评论(0编辑  收藏  举报