一、基本概述

  1.是什么

    Redis:REmote DIctionary Server  (远程字典服务器)

    是完全开源免费的,用C语言编写的,遵守BSD协议,
    是一个高性能的(key/value)分布式内存数据库,基于内存运行
    并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,
    也被人们称为数据结构服务器

  三大特点:

    Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

    Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

    Redis支持数据的备份,即master-slave模式的数据备份

  2.能干什么

    内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务

    取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面

    模拟类似于HttpSession这种需要设定过期时间的功能

    发布、订阅消息系统

    定时器、计数器

  3.怎么干

    ->下载地址:http://redis.io/  http://www.redis.cn/

   特性: 

    数据类型、基本操作和配置

    持久化和复制,RDB/AOF

    事务的控制

    复制

    ...

  4.Redis的安装

    只应该在Linux下安装;windows的只适合玩耍使用(下载,解压就能启动了!)。

    安装抽取为一篇随笔:http://www.cnblogs.com/jiangbei/p/7349639.html ——(包括启动关闭与其它基本概念)

  5.推荐参考

    阿里云Redis开发规范:阿里云Redis开发规范

    Redis开发规范:https://www.cnblogs.com/ae6623/p/6183714.html

二、Redis的数据类型

  1. 5大数据类型

  概述可以参见官网:

 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)

  对于javaBean的存放,可以通过存放一个转换后的json,也可以存放序列化后的字节数组

jedis.set("person:100".getBytes(), SerializeUtil.serialize(new Person(100, "zhangsan")));

  2. 5大数据类型概述

  2.1 String类型

  

String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

  2.2 hash(哈希,类似java里的Map)

Hash(哈希)
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

类似Java里面的Map<String,Object>

  2.3 list(列表)

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

   // LinkedList而不是ArrayList,可以左右插入

   2.4 set(集合)

Set(集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,

  2.5zset(sorted set:有序集合)——相当于set加个分数(排行榜)

zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

  //最常用的是前三种

  3.Redis命令查找

    1.命令大全:http://redisdoc.com/

  4.详解5大数据类型

    4.1Redis 键(key)

    实例:

KEYS *  ——  查看所有的KEY

 exists key的名字,判断某个key是否存在  —— 1代表存在,0代表不存在

 move key db   --->当前库就没有了,被移除了

 expire key 秒钟:为给定的key设置过期时间
 ttl key 查看还有多少秒过期(time to live),-1表示永不过期,-2表示已过期

  已过期,移除内存系统:——一般而言不采用删除,而是设置过期时间让其自动过期,删除可以使用DEL(详见命令大全

 type key 查看你的key是什么类型

  相同KEY是覆盖,而不是弹出:

  

    4.2 Redis字符串(String)

   单值单value:一个String一个值

  实例:

 set/get/del/append/strlen  —— 字符串的常见操作

Incr/decr/incrby/decrby,一定要是数字才能进行加减 —— 数字的相加减(前两个单步递增减,后两个多步)

  //在redis里操作将会提升速度

 getrange/setrange  —— 获取指定区间范围内的值(between and,字符串截取),从零到负一表示全部

 setex(set with expire)键 秒 值 /setnx(set if not exist)——

    setex:设置带过期时间的key,动态设置。
   setex 键 秒值 真实值

//一般情况下,0就是失败了

 mset/mget/msetnx  —— (more set)

      mset:同时设置一个或多个 key-value 对。

      mget:获取所有(一个或多个)给定 key 的值。

      msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

  //不存在部分成功的情况,只有全部不存在时才成功!

    4.3 Redis列表(List)

    单值多value:一个List多个元素

 lpush/rpush/lrange  —— 从左L(left)或从右进行入栈操作;最后一个为范围选中(选中所有时从栈顶开始遍历)

  //从左边插入的(正序插入),取值的时候便是逆序

  //右边与左边相反

 lpop/rpop  —— 从左或右进行出栈操作(注意从栈顶或栈底的操作),即lpop从栈顶弹出,rpop从栈底弹出

  //分清入栈出栈的顺序

 lindex,按照索引下标获得元素(从上到下)

  //注意下标都是从0开始(别被工具的下标迷惑了)

 llen  —— 返回列表长度

lrem key count value  ——  根据参数 count 的值,移除列表中与参数 value 相等的元素。

  //通俗的讲,删除2个3

 ltrim key 开始index 结束index,截取指定范围的值后再赋值给key

  //注意一下索引的位置,左插入是从栈底开始插向栈顶,索引是从栈顶开始的(这里的mylist02是从栈顶开始插入)

 rpoplpush 源列表 目的列表

  这里有点向AK,装入弹夹,射击子弹

  //从mylist的栈底弹出,压入mylist02的栈顶,结果:

 lset key index value  —— 将列表 key 下标为 index 的元素的值设置为 value 。

 linsert key  before/after 值1 值2  —— 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

  性能小结

它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

    4.4 Redis集合(Set)

    单值多value:一个set里有多个元素

 sadd/smembers/sismember  —— 向set中新增;查看所有成员;判断成员是否属于

  //添加时无序不可重复,重复的添加时会自动去掉

  //同理,存在为1,不存在为0

 scard,获取集合里面的元素个数

 srem key value 删除集合中元素

 srandmember key 某个整数(随机出几个数) —— 试试运气,随机出若干个

 spop key 随机出栈(随机弹一个出去)

 smove key1 key2 在key1里某个值      作用是将key1里的某个指定值赋给key2

  集合交并补

差集:sdiff  —— 在第一个set里面而不在后面任何一个set里面的项

交集:sinter
并集:sunion

  //不再举例赘述 并集交集

    4.5 Redis哈希(Hash)

    KV模式不变,但V是一个键值对

  hset/hget/hmset/hmget/hgetall/hdel  存单值;取单值;存多值(more);删除

  

  //这里就是,key是hset01,但value是 id 1001这样的键值对

  像这样,就表示了一个我们熟悉的POJO:

  多值存取:

  删除某个:

 hlen  —— 长度

 hexists key 在key里面的某个值的key  —— 判断是否存在

 hkeys/hvals  —— 查看所有key或value

 hincrby/hincrbyfloat  ——给值增加小数或者整数

 hsetnx  —— 不存在赋值,存在了无效。

  //存在时无效(为0),不存在时赋值

   4.6 Redis有序集合Zset(sorted set)

      在set基础上,加一个score值。
    之前set是k1 v1 v2 v3,
    现在zset是 —— k1 score1 v1 score2 v2

 zadd/zrange  —— 新增与范围查看(与前面类似,0 -1表示查看所有)
  withscores——带上分数显示

 zrangebyscore key 开始score 结束score  —— 查看指定分数范围(默认闭区间)
   withscores —— 带分数显示,同上
   (   不包含——即改为开区间
  limit —— 作用是返回限制, limit 开始下标步 多少步,和SQL的Limt类似,从第几条开始,要几条

  更改范围为开区间;例如 (50 (80

  使用Limit限制:(同样,下标从0开始)

 zrem key 某score下对应的value值,作用是删除元素

 zcard/zcount key score区间
zrank key values值,作用是获得下标值
zscore key 对应值,获得分数

 zrevrank key values值,作用是逆序获得下标值(也就是,最大排名为0)

 zrevrange  —— 逆序排列

 zrevrangebyscore  key 结束score 开始score ——逆序排列,从小达到大,变为从大到小

NoSQL入门第二天——Redis入门介绍的更多相关文章

  1. Linux入门第二天——基本命令入门(中)

    一.文件搜索命令 1.文件搜索命令:locate 速度很快(具体见Linux工具网址的对比),注意无法找到新建的文件(原理暂不展开) locate命令其实是“find -name”的另一种写法,但是要 ...

  2. Linux入门第二天——基本命令入门(上)

    一.常用命令介绍 常见命令可参考:http://man.linuxde.net/ http://linux.51yip.com/ 请对照参考! 常用的快捷键:http://blog.csdn.net/ ...

  3. Linux入门第二天——基本命令入门(下)

    一.帮助命令 1.帮助命令:man (是manual手册的缩写,男人无所不能,/笑哭) 更多man用法以及man page的用法,参见:http://www.linuxidc.com/Linux/20 ...

  4. redis入门(一)

    目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...

  5. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  6. redis入门(三)

    目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...

  7. Redis(二):Redis入门介绍

    Redis入门介绍目录导航: 入门概述 VMWare + VMTools千里之行始于足下 Redis的安装 Redis启动后杂项基础知识讲解 入门概述 是什么 Redis:REmote DIction ...

  8. 第一章· Redis入门部署及持久化介绍

    Redis简介 Redis安装部署 Redis持久化 Redis简介 软件说明: Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. ...

  9. Python 基于python操纵redis入门介绍

    基于python操纵redis入门介绍 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...

随机推荐

  1. linux smem 查看各进程使用memory情况

    SMEM(8) SMEM(8) NAME smem - Report memory usage with shared memory divided proportionally. SYNOPSIS ...

  2. Mysql压缩解决方案

    提到mysql压缩相关的内容,我们能想到的可能是如下几种和压缩相关的场景: 1.客户端和服务器之间传输的数据量太大,需要进行压缩,节约带宽 2.mysql某个列的数据量大,只针对某个列的数据压缩 3. ...

  3. 解决UITableView在iOS7中UINavigationController里的顶部留白问题

    解决UITableView在iOS7中UINavigationController里的顶部留白问题 出现问题时候的截图: 源码: 用到的类: UIViewController+TitleTextAtt ...

  4. sonar常见

    sonar在linux上安装好之后,若之后又更改了sonar的配置,则需要重启服务,重启方法如下: 1.进入到sonar的安装目录下,打开bin目录,会看到所有操作系统的文件夹 2.若操作系统为lin ...

  5. Codewars, Leetcode, Hackerrank. Online Judges Reviews

    http://jasonjl.me/blog/2015/03/30/practical-programming-practice-services/ Codewars, Leetcode, Hacke ...

  6. Windows10自动更新之后,无线有线都连不上网

    大概浪费了我至少6个小时. 一个是无线网卡,这个后来可以修复,其实也不是网卡的原因.最主要的原因是 Realtek PCIe GBE Family Controller  这个驱动.只找到一个win1 ...

  7. web虎所用2个64位驱动:到底在build时要生成几个版本?

    更准确的问法是: 是否需要根据wdk+目标os不同,根据组合生成不同的多组驱动: 1.wdk10:生成windows10和windows2016+的驱动 2. wdk8和wdk8.1:生成window ...

  8. Python简单的购物车小代码

    # -*- coding: utf-8 -*- # @Time : 2018-05-31 14:56 # @Author : 超人 # @Email : huxiaojiu111@gmail.com ...

  9. php5.5.* mysqlnd驱动安装

    1.什么是mysqlnd驱动? PHP手册上的描述: MySQL Native Driver is a replacement for the MySQL Client Library (libmys ...

  10. [USACO09JAN]Earthquake Damage

    嘟嘟嘟 刚开始因为没看到只能走没有损坏的农场,磨叽了20多分钟……不管了,写题解吧. 首先如果一个点不能到达原点,那么和他相邻的点也不能到达原点,所以刚开始我们把不能走的点和他相邻的点都打上标记,然后 ...