zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    使用JDBC连接并操作数据库
    JDBC连接数据库的url设useSSL参数为true产生的问题
    0-1背包问题的学习及LeetCode相关习题练习
    MySQL---操作数据库
    6、Python Requests库高级操作【2】
    5、Python Requests库高级操作【1】
    4、Python 数据解析【2】
    3、Python 数据解析【1】
    Python正则re.S,re.I等作用
    2、Python 使用Requests库通用爬取数据操作
  • 原文地址:https://www.cnblogs.com/wiseroll/p/7161520.html
Copyright © 2011-2022 走看看