hadoop正式学习之redis------redis的学习和操作1

1:redis简介
  Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的读写需求
    redis的键只能是string类型
    redis的值支持多种数据类型
        1:字符串:string
        2:哈希:hash
        3:字符串列表:list
        4:字符串集合:set(不重复,无序)
        5:有序集合:sorted set(不重复,有序)
  特点:
    高性能(Redis读的速度是11W次/s,写的速度是8.1W次/s)
    原子性(保证数据的准确性)
    持久存储(两种方式RDB/快照,AOF/日志)
    主从结构(master-slave,负载均衡,高可用)
    支持集群(3.0版本)
  应用:应用高并发和实时请求的场景
    新浪微博
    hash:关注列表,粉丝列表
    string:微博数,粉丝数(避免使用select count(*) from ...)
    sorted set:TopN,热门微博
     还有github,stackoverflow等也用到了redis 
2:环境搭建
  首先安装c语言的编译环境(有的linux系统中可能已经有了c语言编译环境,直接执行make命令就可以)
    参考
    yum -y install cpp     
    yum -y install binutils     
    yum -y install glibc     
    yum -y install glibc-kernheaders     
    yum -y install glibc-common     
    yum -y install glibc-devel     
    yum -y install gcc     
    yum -y install make
  如果上面的软件都安装了之后再执行make命令还报错,就需要在make命令后面加个选项了
      make MALLOC=libc 指定内存分配器,默认是使用jemalloc              
3:redis安装部署(单机)
  redis官网: http://redis.io/下载redis压缩包
  解压: tar -zvxf redis -3.0.0.tar.gz
  编译、安装
  make
  make install
  拷贝配置文件
       cp redis/redis.conf /etc/(拷贝
 到这里只是为了方便以后使用)
  修改配置文件
     daemonize yes(后台运行) 
    logfile /usr/local/redis/log(日志文件,目录必须存在)
  启动
     redis-server /etc/redis.conf [--port 6379]:中括号里面的东西可以省略,系统默认就是这个。
  redis客户端
     redis-cli [-h 127.0.0.1] [-p 6379]
  关闭
     shutdown然后  exit/quit
4:redis的特性【多数据库】
  多数据库:
    每个数据库对外都是一个从0开始的递增数字命名,不支持自定义的
    redis默认支持16个数据库,可以通过配置文件修改
    redis默认选择的是0号数据库
    SELECT数字:可以切换数据库
    多个数据库之间并不是完全隔离的,flushall
    flushall:清空redis实例下的所有数据
    flushdb:清空当前数据库中的所有数据
5:redis基础命令
  获得符合规则的键名称
    keys表达式(?,*,\?)
  判断一个键是否存在
    exists key
  删除键
    del key
    del key1 key2
  活动键值的数据类型type
    返回值可能是五种类型( string,hash,list,set,zset
  注意:redis的命令不区分大小写
  redis的help命令
     "help <command>" for help on <command>
6:redis数据类型之string
  字符串类型是redis中最基本的数据类型,它能存储任何形式的内容,包含二进制数据,甚至是一张图片(二进制内容)。一个字符串类型的值存储的最大容量是1GB
  命令
    set/get(setnx)------设置/获取数据
    mset/mget------一次设置/获取多个数据
    incr/decr/incrby/decrby/incrbyfloat------递增/递减
    append------追加vlaue值
    strlen------查看值的长度
7:redis数据类型之hash
  hsah类型的值存储了字段和字段值的映射,字段和字段值只能是字符串,不支持其他类型。hash类型的键至多可以存储2^32-1个字段
  hash类型适合存储对象
    redis可以为任何键增减字段而不影响其他键
  命令
    hset/hget/hmset/hmget/hgetall(hsetnx)
    hexists------判断键中的属性是否存在
    hincrby(hash类型中只有hincrby命令)
    hdel
    hkeys/hvals------获取键/值
    hlen(获取键中包含多少个字段)
8:redis数据类型之list
  list是一个有序的字符串列表 ,列表内部实现是使用双向链表(linked  list)实现的
  list还可以作为队列使用
  一个列表类型的键最多容纳2^32-1个元素
  命令
    lpush/rpush/lpop/rpop
    llen/lrange(-1表示最后一个元素)
    lindex------查询指定角标数据
    lset------修改
    ltrim------截取,保留指定数据
    rpoplpush------将元素从一个列表转到另一个列表
9:redis数据类型之set
  set集合的元素都是不重复的,无序的,一个集合类型键可以存储至多2^32-1个元素
  set集合类型和list列表类型的相似之处
    
  命令
    sadd/smembers/srem/sismember
    sdiff(差集)/sinter(交集)/sunion(并集)
    sidffstore/sinterstore/sunionstore
    scard(获取集合长度)/spop(随机从集合取出并删除一个元素)
    srandmember key [count]
        如果count为整数,且小于集合基数,那么命令返回count个元素的数组,数组中的元素各不相同。如果count大于等于集合基数,那么命令返            
    回整个集合
        如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值
10:redis数据类型之sorted  set
  有序集合,在集合类型的基础上为集合中的每个元素都关联了一个分数,这样可以很方便的获得分数最高的N个元素(topN)。
  命令
     zadd/zscore/zrange/zrevrange/
    zrangebyscore(默认是闭区间,可使用"("使用开区间) 
    zincrby/zcard/zcount(获取指定分数范围的元素个数) 
    zrem
  扩展:
    +inf(正无穷)  -inf(负无穷)
易错点
  set命令
    (如果key已经持有其他类型值,set就覆盖旧值,无视类型)
11:java操作redis
  使用jedis第三方jar包操作redis
  数据库连接方式
    单机连接方式
    单机连接池方式
    多机分布+连接池方式
12:redis中键的生存时间(expire)
  redis中可以使用expire,命令设置一个键的生存时间,到时间后redis会自动删除它。
    expire------设置生存时间(单位秒)
    ttl------查看键的剩余生存时间
    persist------取消生存时间
    expireat [key] unix 时间戳
  应用场景
    限时优惠活动
    网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜)
    手机验证码
    限制网站访客访问频率  
13:redis的事物(transaction)
  redis中的事务是一组命令的集合,事务同命令一样都是redis的最小执行单元,一组事务中的命令要么都执行,要么都不执行。
  原理:先将属于一个事务的命令发送给redis进行缓存,最后再让redis依次执行这些命令。
  应用场景
    一组命令都执行或都不执行
    保证一组命令在执行的过程中没有其他,命令的插入
  命令
     multi    事务开始 
    ..... 
    exec    事务结束,开始执行事务中的命令 
    discard    放弃事务
  错误处理
    语法错误:致命的错误,事务中的所有命令都不执行
    运行错误:不会影响事务中其他命令的执行
  Redis不支持回滚(roll back)
    正因为redis不支持回滚功能,才使得redis在事务上可以保持简洁和快速。
  java代码手工实现incr递增命令
  watch命令
    作用:监控一个或者多个键,当被监控值被修改后阻止之后的一个事务的执行。
    但是不能保证其它客户端不能修改这一键值,所以我们需要在事务执行中的命令。
  注意:执行完事务的exex命令,watch就会取消对所有键值的监控
  unwatch:取消监控
14:redis中数据的排序(sort)
  sort命令可以对列表类型,集合类型和有序集合类型进行排序
     sort key [desc] [limit offset count] 
    by 参考键(参考键可以是字符串类型或者是hash类型的某个字段,hash类型的格式为:键名->字段名) 
        如果参考键中不带*号则不排序 
        如果某个元素的参考键不存在,则默认参考键的值为0
  扩展get参数
    get参数的规则和by参数的规则一样
    get #------返回元素本身的值
  扩展store参数
    使用store参数可以把sort的排序结果保存到指定的列表中
  性能优化
    1:尽可能的减少待排序键中元素的数量
    2:使用limit参数中获取需要的数据
    3:如果排序的数据量很大,尽可能使用store参数将结果缓存。
 15:”发布/订阅“模式
    发布:publish
    订阅:subscribe
16:redis任务队列
  任务队列;使用lpush和rpop(brpop)可以实现普通任务队列。
  优先级队列:
     brpop key1 key2 key3 timeout 
17:redis管道(pipeline)
  redis中的pipeline(管道)功能在命令行中没有,但是redis是支持管道的,在java客户端(jedis)中是可以使用的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值