redis

一:nosql和sql的比较

优点:
  1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
  2)查询速度:nosql数据库将数据存储于缓存(内存)之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
  3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而关系型数据库则只支持基础类型。
  4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
缺点:
  1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
  2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。
  3)不提供关系型数据库对事务的处理。

 

二:什么是redis?

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,

且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型有:字符串、哈希、列表、集合、有序集合。

 

三:redis的应用场景

 缓存(数据查询、短连接、新闻内容、商品内容等等)
 聊天室的在线好友列表
 任务队列。(秒杀、抢购、12306等等)
 应用排行榜
 网站访问统计
 数据过期处理(可以精确到毫秒)
 分布式集群架构中的session分离

 

四:redis在linux上的安装

1:将redis压缩包解压到/opt目录下

2:解压完成后进入redis-3.2.5目录执行make命令(需要先安装gcc)

3:运行make distclean之后再 执行make

4:跳过Redis test 继续执行make install

 

五:redis的启动、进入和关闭命令

未备份redis.conf文件时的启动:redis-server

备份后的启动:redis-server + 备份后的redis.conf路径 

进入redis:redis-cli

退出redis:shutdown

 

六:配置redis在后台启动

1、备份redis.conf:拷贝一份redis.conf到其他目录(~目录的myredis下)
2、修改redis.conf(复制出来的那份)文件将里面的daemonize no 改成 yes,让服务在后台启动

七:redis相关

1. 默认16个数据库,类似数组下标从0开始,初始默认使用0号库
3. 统一密码管理,所有库都是同样密码,要么都OK要么一个也连接不上。
4. Redis是单线程+多路IO复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,
如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)

 

八:命令

  1:通用命令

    (1):keys *  查看当前数据库所有的键

    (2):select [下标]  切换数据库

    (3):exists [key值]  查看key是否存在

    (4):type [key值]  查看key的类型

    (5):del [key值]  删除key

    (6):expire  [key值]   [时间]  给key设置存在时间,单位秒,默认永久存在

    (7):ttl   [key值]  查看key还有多久过期,-1表示永不过期,-2表示已经过期

    (8):dbsize   查看当前数据库key的总数

    (9):flushdb  清空当前数据库

    (10):flushall  清空全部数据库 

  2:string类型数据命令

    (1)get <key>  查询对应键值

    (2)set <key> <value>  添加键值对

    (3)append <key> <value>  将给定的<value> 追加到原值的末尾

    (4)strlen <key>  根据key获得值的长度

    (5)setnx <key> <value>  只有在 key 不存在时设置 key 的值
    (6)incr <key>  将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1
    (7)decr <key>  将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1

    (8)incrby / decrby <key> <步长>  将 key 中储存的数字值增减。自定义步长。

    (9)mset <key1> <value1> <key2> <value2> .....  同时设置一个或多个 key-value对
    (10)mget <key1> <key2> <key3> .....   同时获取一个或多个 value
    (11)msetnx <key1> <value1> <key2> <value2> .....   同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

    (12)getrange <key> <起始位置> <结束位置>  获得值的范围,类似java中的substring
    (13)setrange <key> <起始位置> <value>  用 <value> 覆写<key> 所储存的字符串值,从<起始位置>开始。
    (14)setex <key> <过期时间> <value>  设置键值的同时,设置过期时间,单位秒。
    (15)getset <key> <value>  以新换旧,设置了新值同时获得旧值。

  3:List类型数据命令

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

    它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

    (1)lpush/rpush <key> <value1> <value2> <value3> ....  从左边/右边插入一个或多个值。

    (2)lpop/rpop <key>   从左边/右边吐出一个值。吐出来就相当于剪切,原来的就没了

    (3)rpoplpush <key1> <key2>   从<key1>列表右边吐出一个值,插到<key2>列表左边。

    (4)lrange <key> <start> <stop>  按照索引下标获得元素(从左到右)

    (5)lindex <key> <index>  按照索引下标获得元素(从左到右)
    (6)llen <key>  获得链表长度
    (7)linsert <key> before <value> <newvalue>   在<value>的前面插入<newvalue>

    (8)lrem <key> <n> <value>  从左边删除n个value(从左到右)

  4:set数据类型命令

    set和list类似,但有不同点,自动去重以及无序它底层是value为null的Hash表,所有增删查的复杂度都是O(1)

    (1)sadd <key> <value1> <value2> .....   将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

    (2)smembers <key>  取出该集合的所有值。

    (3)sismember <key> <value>  判断集合<key>是否为含有该<value>值,有返回1,没有返回0
    (4)scard <key>  返回该集合的元素个数。

    (5)srem <key> <value1> <value2> ....  删除集合中的某个元素。

    (6)spop <key>   随机从该集合中吐出一个值。吐出来意味着就会被删除掉
    (7)srandmember <key> <n>  随机从该集合中取出n个值。不会从集合中删除
    (8)sinter <key1> <key2>   返回两个集合的交集元素。

    (9)sunion <key1> <key2>   返回两个集合的并集元素。

    (10)sdiff <key1> <key2>   返回两个集合的差集元素。

  5:Hash数据类型命令

    (1)hset <key> <field> <value>  给<key>集合中的 <field>键赋值<value>

    (2)hget <key1> <field>   从<key1>集合<field> 取出 value

    (3)hmset <key1> <field1> <value1> <field2> <value2>...    批量设置hash的值

    (4)hexists key <field>  查看哈希表 key 中,给定域 field 是否存在。

    (5)hkeys <key>   列出该hash集合的所有field

    (6)hvals <key>   列出该hash集合的所有value

    (7)hincrby <key> <field> <increment>   为哈希表 key 中的域 field 的值加上增量 increment

    (8)hsetnx <key> <field> <value>  将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在

  6:Zset数据类型命令

    和set类似,但是里面的每个值都有个对应的分数,Zset会通过分数来升序排列这些值,值不能重复但是分数可以

    (1)zadd <key> <score1> <value1> <score2> <value2>...  将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

    (2)zrange <key> <start> <stop> [WITHSCORES]   返回有序集 key 中,下标在<start> <stop>之间的元素(包含start和stop的)带WITHSCORES,可以让分数一起和值返回到结果集。

    (3)zrangebyscore key min max [withscores] [limit offset count]  返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

    (4)zrevrangebyscore key max min [withscores] [limit offset count]  同上,改为从大到小排列。

    (5)zincrby <key> <increment> <value>  为元素的score加上增量

    (6)zrem <key> <value>   删除该集合下,指定值的元素

    (7)zcount <key> <min> <max>   统计该集合,分数区间内的元素个数

    (8)zrank <key> <value>   返回该值在集合中的排名,从0开始。

 

九:在idea连接redis

  1. Jedis所需要的jar包
      commons-pool2-2.4.2.jar
      jedis-2.8.1.jar
  2. 用windows中的IDEA连接虚拟机的Redis的注意事项
      先查看防火墙的状态
      service iptables status
      1. 禁用Linux的防火墙:
      2. 临时禁用:service iptables stop
      3. 关闭开机自启:chkconfig iptables off
      4. redis.conf中注释掉bind 127.0.0.1(61行) ,然后 protect-mode(80行)设置为 no。

  3. Jedis测试连通性
      public class Demo01 {
        public static void main(String[] args) {
          // 连接Redis服务
          Jedis jedis = new Jedis("192.168.1.100",6379);
          //查看服务是否运行,打出pong表示OK
          System.out.println("connection is OK==========>: "+jedis.ping());
        }
      }

 

posted @ 2020-03-05 18:45  拔丝小红薯  阅读(115)  评论(0编辑  收藏  举报