Redis概述与Redis集群(一)

Redis


  今天给你们分享的是Redis,若有不足之处,敬请指正,那么什么是Redis呢?redis

1、Redis简介

1.1 Redis是什么

  Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库数据库

1.2 Redis特色

  1. 基于内存
  2. 可持久化数据
  3. 具备丰富的数据结构类型,适应非关系型数据的存储需求
  4. 支持绝大多数主流开发语言,如C、C++、Java、Python、R、JavaScript等。
  5. 支持集群模式,高效、稳定。

1.3 数据模型

  1. 键值对形式。
  2. Redis的数据结构类型,指的就是Redis值的结构类型。

1.4 Redis做用

  1. 本质是数据库,能存储数据。 Redis能灵活处理非关系型数据的读、写问题,是对MySQL等关系型数据库的补充。
  2. 缓存数据。 所谓缓存,就是将数据加载到内存中后直接使用,而不是每次都经过IO流从磁盘上读取。好处:读写效率高。而Redis则是将数据直接存储在内存中,只有当内存空间不足时,将部分数据持久化到磁盘上。

2、Redis的键key

  前面咱们说到Redis的数据模型为键值对形式。接下来咱们来分析Redis的键key。缓存

2.1 key的类型

  redis的key 值是二进制安全的,这意味着能够用任何二进制序列做为key值,从形如”foo”的简单字符串到一个JPEG文件的内容均可以。 空字符串也是有效key值。安全

  redis建议使用字符串作为key的类型服务器

2.2 key取值规范

  1. 键值不须要太长,消耗内存,在数据中查找这类键值的计算成本较高。
  2. 键值不宜太短,可读性较差,一般建议见名知意。

2.2.1 取值举例

 将以下数据库表中的数据,转换为redis的key-value存储。数据结构

id username password email
1 lisi 111111 lisi@163.com
  • 127.0.0.1:6379> set user:id:1:username lisi

   OKapp

  • 127.0.0.1:6379> set user:id:1:password 111111

   OK性能

   OK测试

  • 127.0.0.1:6379> keys user:id:1* #查找有几个属性
  1. "user:id:1:password".net

  2. "user:id:1:username"

  3. "user:id:1:email"

  • 127.0.0.1:6379>

2.3 Key命令

命令 做用
exists key 检查给定key是否存在。
del key 删除一个key
del key1 key2 key3 删除多个key
keys pattern (模糊查找) 查找全部符合给定模式 pattern 的 key
expire key seconds 指定key的过时时间。新添加的key,若是没有指定过时时间,则会一直保存。能够对一个已经带有生存时间的key执行EXPIRE命令,新指定的生存时间会取代旧的生存时间。
ttl key 查看某个key的剩余过时时间,返回值:2 表示这个key已通过期返回1表示没有设置过时时间 返回其它 表示剩余的生存时间,单位为秒。
rename 语法格式:rename key newkey将 key 更名为 newkey 。当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。
type key 查看key对应的value的数据结构类型

  其它key命令见redis帮助文档 http://doc.redisfans.com/


3、Redis的值value(数据结构类型)

3.1 string类型

  string类型是redis最经常使用的数据结构类型,存储的值为字符串。

3.1.1 String相关命令

命令 做用
set key value 设置一个key,值为value,类型为String类型;若是这个key已经存在,则更新这个key的值。返回值1 表示成功0 表示失败
get key 获取key对应的value值;若是key不存在,则返回nil
mget key1 key2 一次获取多个key的值,若是对应key不存在,则对应返回nil
incr key 将 key 中储存的数字值增一,而后返回
decr key 将 key 中储存的数字值减一,而后返回,若是这个key不存在,那么key的值会先被初始化为0,而后再执行INCR操做。若是这个key对应的value值,不能表示数字,则会返回一个错误
decrby key decrement 将key减小对应的步长值
append key value 若是key已经存在,则将value追加到这个key原先的value值的末尾。若是这个key不存在,则执行set操做

  Redis的key是单线程模式,这就意味一瞬间只有一个线程可以持有这个key,因此可使用redis解决部分涉及线程安全的业务。

  • 127.0.0.1:6379> help @string 查看string类型的帮助文档
  • 127.0.0.1:6379> help set 查看set命令的帮助文档

3.2 List类型

3.2.1 特色

  1. 基于Linked List实现
  2. 元素是字符串类型
  3. 列表头尾增删快,中间增删慢,增删元素是常态
  4. 元素能够重复出现
  5. 最多包含2^32-1元素
图示
  • 列表的索引
  1. 从左至右,从0开始
  2. 从右至左,从-1开始
图示

3.2.2 List类型相关命令

命令 做用
lpush key value [value ...] 将一个或多个值value插入到列表key的表头(即从左边插入) 若是 key 不存在,一个空列表会被建立并执行 LPUSH 操做。当 key 存在但不是列表类型时,返回一个错误。
rpush key value [value ...] 尾部添加(从右向左),操做同上
llen key 返回key对应list的长度,key不存在返回0,若是key对应类型不是list返回错误
lindex key index index元素在list列表中的下角标,从0开始;lindex 是从左到右取元素
lrange key start stop 获取指定区间的全部元素;下角标从0开始,0表示第一个元素,1表示第二个,依次类推;-1表示最后一个元素,-2表示倒数第二个元素,依次类推;
lpop key 移除并返回列表中的第一个元素
rpop key 移除并返回列表中的最后一个元素

3.3 Hash类型

3.3.1 特色

特色
  1. 由Field和与之关联的value组成map键值对
  2. field和value是字符串类型
  3. 一个hash中最多包含2^32-1键值对

3.3.2 Hash相关命令

命令 做用
hset key field value 设置hash field为指定值,若是key不存在,则先建立 若是field已经存在,那么将更新这个field的值
hget key field 获取指定的hash field
hmget key filed1....fieldN 获取所有指定的hash filed
hmset key filed1 value1 ... filedN valueN 同时设置hash的多个field
hexists key field 测试指定field是否存在
hdel key field 删除指定的hash field
hlen key 返回指定hash的field数量
hkeys key 返回hash的全部field
hvals key 返回hash的全部value
hgetall 返回hash的全部filed和value

3.3.3 Hash的用途

  节约内存空间

  redis每建立一个键,都会为这个键储存一些附加的管理信息(好比这个键的类型,这个键最后一次被访问的时间等等)

  redis的key相对于值来讲,更珍贵!!!

  因此数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,在获取key对应的value值时cpu的开销也会更多

  Hash结构能够将具备关联关系的一组key-value,存储到同一个hash结构中,从而减小key的数量。

3.3.4 hash不适用的场景

  须要设置键过时功能的key: Redis的key的过时功能只能对键操做,而Hash结构不能单独对某一个filed设置过时功能。

3.4 Set类型(集合)

3.4.1 特色

特色
  1. 无序的、去重的;
  2. 元素是字符串类型;
  3. 最多包含2^32-1元素。

3.4.2 Set相关命令

命令 做用
sadd key member [member ...](无序不重复) 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
smembers key 返回集合 key 中的全部成员。不存在的 key 被视为空集合
spop key 移除并返回集合中的一个随机元素。被移除的随机元素。当key不存在或key是空集时,返回nil
scard key 返回集合key的基数(集合中元素的数量)。集合的基数。当key不存在时,返回0
sinter key [key ...] 交集 返回一个集合的所有成员,该集合是全部给定集合的交集。不存在的 key 被视为空集
sunion key [key ...] 并集 返回一个集合的所有成员,该集合是全部给定集合的并集。不存在的 key 被视为空集
sdiff key [key ...] 差集 返回一个集合的所有成员,该集合是全部给定集合之间的差集。不存在的 key 被视为空集

3.5 SortedSet类型

3.5.1 特色

  1. 相似Set集合;
  2. 有序的、去重的;
  3. 元素是字符串类型;
  4. 每个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值能够相同
  5. 最多包含2^32-1元素

版权说明:欢迎以任何方式进行转载,但请在转载后注明出处!

相关文章
相关标签/搜索