Redis概述与Redis集群(一)

Redis


  今天给大家分享的是Redis,如有不足之处,敬请指正,那么什么是Redis呢?

一、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则是将数据直接存储在内存中,只有当内存空间不足时,将部分数据持久化到磁盘上。

二、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存储。

idusernamepasswordemail
1lisi111111lisi@163.com
  • 127.0.0.1:6379> set user:id:1:username lisi

   OK

  • 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"

  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/


三、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 indexindex元素在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元素

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

转载于:https://my.oschina.net/u/4118479/blog/3040068

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值