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元素

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值