NoSQL入门第二天——Redis入门介绍
一、基本概述
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入门介绍的更多相关文章
- Linux入门第二天——基本命令入门(中)
一.文件搜索命令 1.文件搜索命令:locate 速度很快(具体见Linux工具网址的对比),注意无法找到新建的文件(原理暂不展开) locate命令其实是“find -name”的另一种写法,但是要 ...
- Linux入门第二天——基本命令入门(上)
一.常用命令介绍 常见命令可参考:http://man.linuxde.net/ http://linux.51yip.com/ 请对照参考! 常用的快捷键:http://blog.csdn.net/ ...
- Linux入门第二天——基本命令入门(下)
一.帮助命令 1.帮助命令:man (是manual手册的缩写,男人无所不能,/笑哭) 更多man用法以及man page的用法,参见:http://www.linuxidc.com/Linux/20 ...
- redis入门(一)
目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...
- redis入门(二)
目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- Redis(二):Redis入门介绍
Redis入门介绍目录导航: 入门概述 VMWare + VMTools千里之行始于足下 Redis的安装 Redis启动后杂项基础知识讲解 入门概述 是什么 Redis:REmote DIction ...
- 第一章· Redis入门部署及持久化介绍
Redis简介 Redis安装部署 Redis持久化 Redis简介 软件说明: Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. ...
- Python 基于python操纵redis入门介绍
基于python操纵redis入门介绍 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...
随机推荐
- Django Redis验证码 密码 session 实例
1.settings CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCach ...
- JQuery this和$(this)的区别
this其实是一个Html 元素. $this 只是个变量名,加$是为说明其是个jquery对象. 而$(this)是个转换,将this表示的dom对象转为jquery对象,这样就可以使用jquery ...
- Excel连接字符串在.NET中的应用
转:https://www.cnblogs.com/jaxu/archive/2011/07/29/2121022.html 介绍几种在.NET中直接连接Excel作为数据源的几种方法以及连接字符串的 ...
- 第一章 数据库和SQL
1-1 数据库是什么? 一.数据库的含义 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合. 数据库DB 二.数据库管理系统 DBMS 用来管理数据库的计算机系统称为 ...
- VC++下使用ADO操作数据库
VC++下使用ADO操作数据库主要要用到 _ConnectionPtr,_CommandPtr,_RecordsetPtr三个ADO对象指针,我查找了相关资料,发现网上源码很多,但是都相对凌乱,于是自 ...
- lambda 表达式的由来
相关技术点:函数指针.C#委托.匿名方法.lambda表达式 谈到lambda表达式,首先从委托讲起, 委托是持有一个或者多个方法的对象,这个特性有点像C中的函数指针,可以指向不同的方法,下面的例子是 ...
- December 02nd 2016 Week 49th Friday
People will fall for its appearance while driving passionately. 观者倾心,驭者动魄. An advertisement of Merce ...
- 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 ...
- unix时间戳的转换
UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() ...
- JXL API总结
API参考: http://www.andykhan.com/jexcelapi/index.html 官网: http://jexcelapi.sourceforge.net/ 1. 创建可写的工作 ...