一、基本概述

  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. Django Redis验证码 密码 session 实例

    1.settings CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCach ...

  2. JQuery this和$(this)的区别

    this其实是一个Html 元素. $this 只是个变量名,加$是为说明其是个jquery对象. 而$(this)是个转换,将this表示的dom对象转为jquery对象,这样就可以使用jquery ...

  3. Excel连接字符串在.NET中的应用

    转:https://www.cnblogs.com/jaxu/archive/2011/07/29/2121022.html 介绍几种在.NET中直接连接Excel作为数据源的几种方法以及连接字符串的 ...

  4. 第一章 数据库和SQL

    1-1 数据库是什么?   一.数据库的含义 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合. 数据库DB   二.数据库管理系统 DBMS 用来管理数据库的计算机系统称为 ...

  5. VC++下使用ADO操作数据库

    VC++下使用ADO操作数据库主要要用到 _ConnectionPtr,_CommandPtr,_RecordsetPtr三个ADO对象指针,我查找了相关资料,发现网上源码很多,但是都相对凌乱,于是自 ...

  6. lambda 表达式的由来

    相关技术点:函数指针.C#委托.匿名方法.lambda表达式 谈到lambda表达式,首先从委托讲起, 委托是持有一个或者多个方法的对象,这个特性有点像C中的函数指针,可以指向不同的方法,下面的例子是 ...

  7. December 02nd 2016 Week 49th Friday

    People will fall for its appearance while driving passionately. 观者倾心,驭者动魄. An advertisement of Merce ...

  8. November 29th 2016 Week 49th Tuesday

    It is not easy to meet each other in such a big world. 世界这么大,能遇见,不容易. To meet each other, to make ne ...

  9. unix时间戳的转换

    UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() ...

  10. JXL API总结

    API参考: http://www.andykhan.com/jexcelapi/index.html 官网: http://jexcelapi.sourceforge.net/ 1. 创建可写的工作 ...