Redis(学习笔记)

NOSQL

  1. 概念
    NoSQL(Not Only SQL),是一项全新的数据库理念,泛指非关系型的数据库

  2. 关系型与非关系型
    关系型:表与表之间的关系,一个表中字段与字段之间的关系。在mysql中,存在主子表关系,数据之间是有关系的
    非关系型:数据之间没有任何关系
    关系型与非关系型
    非关系型数据库存储用户经常查询的数据,在缓存数据库中查询数据的速度很快,但是缓存数据库数据不安全,所有缓存数据库会从mysql数据库获取数据存储到缓存中。这样可以保证mysql的数据存在两份,即使在缓存中丢失也无所谓,因为在mysql中还有一份数据

  3. 为什么需要使用NOSQL
    NOSQL数据库可以大幅度提高web程序的性能,具体表现为对如下三高问题的解决

  • High performance-- 对数据库高并发读写的需求
    web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。
  • Huge Storage-- 对海量数据的高效率存储和访问的需求
    类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。
  • High Scalability && High Availability 对数据库的高可扩展性和高可用性的需求
    在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。
  1. 主流的NOSQL产品
  • 键值(Key-Value)存储数据库
    相关产品:Tokyo Cabinet/Tyrant,Redis,Voldemort,Berkeley DB
    典型应用:内容缓存,主要用于处理大量数据的高访问负载
    数据模型:一系列键值对
    优点:快速查询
    缺点:存储的数据缺少结构化
  • 列存储数据库
    相关产品:Cassandra,HBase,Riak
    典型应用:分布式的文件系统
    数据模型:以列簇式存储,将同一列数据存在一起
    优点:查找速度快,可扩展性强,更容易进行分布式扩展
    缺点:功能相对局限
  • 文档型数据库
    相关产品:CouchDB,MongoDB
    典型应用:Web应用(与Key-Value类似,Value是结构化的)
    数据模型:一系列键值对
    优点:数据结构要求不严格
    缺点:查询效率不高,而且缺乏统一的查询语法
  • 图片数据库
    相关数据库:Neo4j,InfoGrid,Infinite Graph
    典型应用:社交网络
    数据模型:图结构
    优点:利用图结构相关算法
    缺点:需要对整个图做计算才能得出结果,不容易做分布式的集群方案

Redis的基本介绍

  1. 概念
    Redis是用C语言开发的一个开源的高性能键值对数据库。
  2. 特点
    Redis通过多种键值对类型来适应不同场景下的存储需求,Redis支持多种键值类型,有
  • 字符串类型 string
  • 散列类型 hash
  • 列表类型 list
  • 集合类型 set
  • 有序集合类型 sortedset
    本质是通过查找key来获取value
    Redis存储数据不会转码,而是按进制字节来存储,这也是查找效率高的一个原因
  1. 应用场景
  • 缓存(数据查询,短链接,新闻内容,商品内容等)
  • 聊天室的在线好友列表
  • 任务队列(秒杀,抢购,12306等)
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精准到毫秒)
  • 分布式集群架构中的session分离
    总结:
    redis的查询速度很快,但是如果mysql中的数据需要频繁的更新则不建议使用redis,这样会导致redis频繁从mysql更新数据,效率下降
    redis适合存储经常查询又不经常更新的数据(不要毫秒级更新)
  1. Redis的安装
    4.1 windows版的Redis下载与安装
    下载:
    官方提倡使用Linux版的Redis,所以官方只提供了Linux版本的Redis,可以在Github上下载windows版的Redis
    官方下载地址:http://redis.io/download
    github下载地址:https://github.com/MSOpenTech/redis/tags
    安装:
    解压压缩包即可,window版的Redis为绿色版
    4.2 window版Redis的目录结构
文件作用
redis-benchmark性能测试工具
redis-check-aofAOF文件修复工具
redis-check-dumpRDB文件检查工具(快照持久化文件)
redis-cli命令行客户端
redis-serverredis服务器启动命令
redis.windows.confredis核心配置文件

4.3 启动和关闭
启动:双击redis-serve服务器端即可启动redis服务,占用的端口是6379
关闭:关闭Redis的控制台窗口即可关闭Redis服务

4.4 使用
双击redis-cli客户端即可使用

4.5 注意事项

  • redis必须要解压到非中文目的里面,目录结构不可太深。
  • redis所在的硬盘空间必须有20G以上

Redis的数据类型

五种数据类型
redis是一种高级的key-value的存储系统,其中value支持5种数据类型:

  • String(字符串)
  • hash(哈希,类似java中的map)
  • list(字符串列表,类似java中的linkList)
  • set(字符串集合,类似java中的set)
  • sorted set(有序字符串集合)
    最常用的是String类型
    在这里插入图片描述
    关于key的定义需要注意以下:
  • key不要太长,最好不要超过1024个字节,不然会消耗内存还会降低查找效率
  • key不要太短,太短会降低key的可读性
  • 在项目中,key最好有一个统一的命名规范(见名知意)

字符串类型String(重点)

  1. 概述:
    字符串类型是Redis中最基础的数据存储类型。Redis中字符串类型是二进制安全的,存入的值和获取的值相同。在Redis中字符串类型的value最多可以容纳的数据长度是512M
  2. 常用命令
  • set key value
    存值命令,设定key持有指定的字符串value,如果key存在则进行覆盖操作,成功返回OK
  • get key
    获取key的value,如果与该key关联的value不是String类型,redis则返回错误信息,因为get命令只能获取字符串类型的值;如果key不存在,则返回(nil)
  • del key
    删除指定的key

哈希类型hash

  1. 概述
    Redis中的hash类型可以看成具有String Key和String Value的map容器。每一个Hash可以存储4294967295个键值对
  2. 哈希类型常用命令
  • hset key field value
    为指定的key设定field/value对
  • hset key field value [field value…]设置key中的多个field/value
  • hget key field
    返回指定的key中的field的值
  • hmget key fields 获取key中的多个field值
  • hgetall myhash 一次获取key的所以map的key和value
  • hdel key field [field] 删除一个或多个字段,返回值是被删除的字段个数

列表类型list

  1. 概述
    列表类型结构
    在Redis中List类型是按照插入顺序排序的字符串链表(java中的linkedlist),可以从链表的头部或尾部插入value。插入时,如果该键并不存在,Redis将为该键创建一个新的链表。如果链表中所有的元素均被移出,那么该键也会从数据库中被删除。List可以包含的最大元素数量是4294967295
  2. 列表类型命令
  • lpush key value1 value2
    在指定的key所关联的list的头部插入所有的values,如果key不存在,该命令在插入值之前会创建一个与该key关联的空链表再插入数据。插入成功,返回元素的个数
  • rpush key value1 value2 value3
  • 在指定的key对应的list的尾部插入所有的value,如果该key不存在,该命令在插入之前创建一个与该key对应的空链表,再从尾部插入数据。插入成功,返回元素的个数
  • lrange key start end
    获取链表中从start到end元素的值,start和end表示索引值,从0开始;如果为负数,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推
  • lpop key 从头部弹出元素
  • rpop key 从尾部弹出元素
  • llen key
    返回指定key对应列表中的元素个数,即链表的长度

集合类型set

  1. 概述
    在Redis中Set类型可以看作没有排序的字符集合。Set可以包含的最大元素数量是4294967295,Set集合中步云山出现重复的元素
  2. 常用命令
  • sadd key values [value1 value2…]
    向set中添加数据,如果value已经存在则不会重复添加
  • smenbers key
    获取set中所有的成员
  • srem key members[member1,member2…]
    删除set中指定的成员

Redis的通用命令

  • keys pattern
    获取所有与pattern匹配的key。*表示任意一个或多个字符,?表示任意一个字符
  • del key1 key2…
    删除指定的key
  • exists key
    判断该key是否存在,1表示存在,0表示不存在
  • type key
    获取指定key的类型。返回的字符串有string,hash,list,set,如果key不存在则返回none
  • select 数字(需要切换到的数据库)
    切换数据库
    一个Redis服务器可以包括多个数据库,客户端可以指定连接Redis中的哪个数据库。
    一个Redis实例最多可提供16个数据库,下标为0到15,客户端默认连接第0个数据库
  • move key 数字
    移key到其他数据库,数字代表数据库

Jedis

  1. 概述
    Jedis是用来操作redis的java客户端。在redis的官方网站里有一些Java客户端,有Jedis,Redisson,Jredis,JDBC-Redis,官方推荐使用Jedis和Redisson。简单来说,Jedis是一个Java类,用来操作redis
    github上的下载链接:https://github.com/xetorthio/jedis
  2. 基本操作
    常用API
方法说明
new Jedis(host,port)创建jedis对象,参数host是redis服务器地址,参数port是服务器端口
set(key,value)设置字符串类型的数据
get(key)获得字符串类型数据
hset(key,field,value)设置哈希类型的数据
hget(key,field)获取哈希类型的数据
lpush(key,value)设置列表类型的数据
lpop(key)列表头部出栈
rpop(key)列表尾部出栈
del(key)删除指定的key
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值