目录

  • 1、存储数据概述
  • 2、关系数据库与非关系型数据库
    • 2.1、非关系型数据库产生背景
  • 3、Redis简介
    • 3.1、redis与memcached比较
      • 3.11、使用场景
    • 3.2、Redis支持五种数据类型
  • 4、Redis 安装部署实验
    • 4.1、放入Redis安装包,进行解压缩
  • 5、Redis支持的五种数据类型测试
    • 5.1、string(字符串)
    • 5.2、Hash(哈希)
    • 5.3、List(列表)
    • 5.4、Set(无序集合)
  • 5.5、Zset(sorted set:有序集合)

1、存储数据概述

■ 存储数据类型分类:
● 结构化数据:可以通过二维表格形式表述这个数据。
● 非结构化数据:不方便以二维表格形式表述的这种类型的数据。

■ 根据不同种存储数据类型分类分成两种不同类型的数据库:
● sql结构化数据库:里面存储的数据类型是结构化数据。别称称为关系型数据库
● nosql非结构化数据库:里面存储的数据类型是非结构化数据。别称称为非关系型数据库

2、关系数据库与非关系型数据库

■ 关系型数据库
● 一个结构化的数据库,创建在关系模型基础上
● 一般面向于记录
● 包括
◆Oracle、 MySQL、SQL Server、Microsoft Access、DB2等
● 特点:
表与表之间可以建立某种联系

■ 非关系型数据库
● 除了主流的关系型数据库外的数据库,都认为是非关系型
● 包括
◆Redis、 MongBD、 Hbase、 CouhDB等
● 特点:只存数据本身,不建立表与表之间的联系,存储和读取速度快

2.1、非关系型数据库产生背景

■ High performance—对数据库高并发读写需求

■ Huge Storage—对海量数据高效存储与访问需求

■ High Scalability && High Availability—对数据库高可扩展性与高可用性需求

3、Redis简介

■ Redis基于内存运行并支持持久化

■ 采用key-value (键值对)的存储形式

■ 优点
● 具有极高的数据读写速度
● 支持丰富的数据类型
● 支持数据的持久化
● 原子性
● 支持数据备份

3.1、redis与memcached比较

■ 支持的存储类型不同
虽然redis和memcached都是内存型数据库,并且memcached不仅能够存储string类型,还能够存储图片、文件、视频等格式的文件。然而对于更多的使用内存数据库做缓存以及分布式方案的程序开发者来说,memcached提供的string类型存储的应用场景非常有限,而存储图片视频的功能又十分鸡肋(许多公司的用户场景是没这方面需求)。相比之下,redis提供set,hash,list等多种类型的存储结构,非常适合分布式缓存的实现。

■ 数据落盘
memcached 数据不可恢复,虽然大多数人使用缓存以及分布式方案都不会要求数据持久化,但是谁也不能保证不出现万一的情况。一旦发生稳定性问题,memcached挂掉后,数据是不可恢复的,而redis除了支持在配置里打开数据落盘(RDB),还能通过aof来找回数据。

■ 内存空间与数据量
memcached可以修改最大内存,使用的是LRU算法,而redis目前底层使用了自己的VM,引入了新的特性突破了物理内存的限制。个人认为在这方面依然是redis更加优秀一些。
value值-redis最大可以达到1GB,而memcache只有1MB

3.11、使用场景

■ 会话缓存(Session Cache)
最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?
幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

■ 全页缓存(FPC)
除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。
再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。
此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

■ 队列
Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。
如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

■ 排行榜/计数器
Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:
当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。

■ 发布/订阅
最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。

■ 其他
但是如果是对缓存的数据格式有更多的要求,且对安全性也有很高的要求的话,建议还是使用redis,这也是redis目前正在逐渐代替memcached的根本原因。

3.2、Redis支持五种数据类型

■ String(字符串)
● string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
● string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
● string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
● 实例:set 键 值 设置键值对 get 键 获取键的值
Set sting1 8
Get string1
8
Incr string1
9
Decr string1
8
Decrby string1 2
6
Incrby string1 5
11

■Hash(哈希)
● Redis hash 是一个键值(key=>value)对集合。
● Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
● 实例:Hset:添加hash数据 hget:获取hash数据 hmget:获取多个hash数据
Hset hash1 key1 a
Hset hash1 key2 b
Hset hash1 key3 c
Hset hash1 field1 a1 field2 a2
Hget hash1 key1
Hmget hash1 key1 key2 key3
Hmget hash1 field1 field2

■List(列表)
● Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
● 实例:lpush:从左边推入值 lpop:从左边弹出值 rpush:从右边推入值 rpop:从右边弹出值 llen:查看某个list数据类型的长度
Lpush list1 1
Lpush list1 2
Lpush list1 3
Llen list1
3
Rpop list1
1
Llen list1
2
Lrange list1 列出所有list1的值

■Set(集合)
● Redis 的 Set 是 string 类型的无序集合。
● 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
● sadd 命令
● 添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
sadd key member
scard:查看set数据中存在的元素个数
sismember:判断set数据中是否存在某个元素
srem:删除某个set数据中的元素
● 实例:
sadd set1 12
1
sadd set1 13
1
sadd set1 12
0
Scard set1
2
Sismember set1 11
0
Sismember set1 13
1
Srem set1 13
1
Sismember set1 13
0
Smembers set1 列出set1所有值

■ zset(sorted set:有序集合)
● Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
● 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
使用方法:zadd key score member
zcard:查询
zrang:数据排序
● 实例:
Zadd zset1 1.1 val1
Zadd zset1 2.2 val2
Zadd zset1 3.3 val3
Zadd zset1 3.3 val33
Zcard zset1
4
Zrangebyscore zset1 0 10

  1. val1
  2. val2
  3. val3
  4. val33
    Zrange zset1 0 10 withscores
  5. val1
  6. 1.10000000000000001
  7. Val2
  8. 2.20000000000000002
  9. Val3
  10. 3.29999999999999998
  11. Val3.3
  12. 3.29999999999999998

4、Redis 安装部署实验

4.1、放入Redis安装包,进行解压缩

[root@server7 ~]# tar zxvf redis-5.0.4.tar.gz  #解压缩
[root@server7 ~]# cd redis-5.0.4/
[root@server7 redis-5.0.4]# make  #编译安装
[root@server7 redis-5.0.4]# make PREFIX=/usr/local/redis install   #设置安装路径
[root@server7 redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/local/bin      #命令链接
[root@server7 redis-5.0.4]# cd utils/
[root@server7 utils]# ll

[root@server7 utils]# ./install_server.sh    #运行安装脚本

[root@server7 utils]# netstat -anpt | grep redis

[root@server7 utils]# cd
[root@server7 ~]# redis-cli              #连接数据库

[root@server7 ~]# vi /etc/redis/6379.conf   #进入配置文件

[root@server7 ~]# /etc/init.d/redis_6379 stop  #停止redis
[root@server7 ~]# /etc/init.d/redis_6379 start  #开启redis
[root@server7 ~]# redis-cli -h 192.168.74.70 -p 6379      #连接本机

5、Redis支持的五种数据类型测试

5.1、string(字符串)

192.168.74.70:6379> set a 9
OK
192.168.74.70:6379> get a
"9"
192.168.74.70:6379> type a
string

192.168.74.70:6379> incr a
(integer) 10
192.168.74.70:6379> get a
"10"
192.168.74.70:6379> decr a
(integer) 9
192.168.74.70:6379> get a
"9"
192.168.74.70:6379> incrby a 8
(integer) 17
192.168.74.70:6379> get a
"17"
192.168.74.70:6379> decrby a 5
(integer) 12
192.168.74.70:6379> get a
"12"

5.2、Hash(哈希)

192.168.74.70:6379> hset hash1 key1 4
(integer) 1
192.168.74.70:6379> hset hash1 key2 8
(integer) 1
192.168.74.70:6379> hset hash1 key3 9
(integer) 1
192.168.74.70:6379> hset hash1 field1 a1 field2 a2
(integer) 2
192.168.74.70:6379> hget hash1 key1
"4"
192.168.74.70:6379> hget hash1 key2
"8"
192.168.74.70:6379> hget hash1 key3
"9"
192.168.74.70:6379> hget hash1 field1 field2
(error) ERR wrong number of arguments for 'hget' command
192.168.74.70:6379> hmget hash1 field1 field2
1) "a1"
2) "a2"
192.168.74.70:6379> hmget hash1 field1 field2 key1 key2 key3
1) "a1"
2) "a2"
3) "4"
4) "8"
5) "9"
192.168.74.70:6379>

5.3、List(列表)

192.168.74.70:6379> lpush list a         #左入a
(integer) 1
192.168.74.70:6379> lpush list b         #左入b
(integer) 2
192.168.74.70:6379> lpush list c          #左入c
(integer) 3
192.168.74.70:6379> lpop list             #最先取出C
"c"
192.168.74.70:6379> llen list              #长度为2
(integer) 2
192.168.74.70:6379> lrange list 0 2   #列出list所剩值
1) "b"
2) "a"
192.168.74.70:6379> lrange list 0 1  #列出list所剩值
1) "b"
2) "a"
192.168.74.70:6379> lrange list 0 3  #列出list所剩值
1) "b"
2) "a"
192.168.74.70:6379> lrange list 1 2  #列出list所剩值
1) "a"
192.168.74.70:6379> rpop list  #右出由于a在最下面,所以取出a
"a"
192.168.74.70:6379> lrange list 0 3  #list剩余值为b
1) "b"
192.168.74.70:6379> lpush list 8   #左入8
(integer) 2
192.168.74.70:6379> lpop list #左出最后添加的8,8被最先取出
"8"

5.4、Set(无序集合)

192.168.74.70:6379> sadd set a     #输入键值a,"1"显示正确
(integer) 1
192.168.74.70:6379> sadd set b   #输入键值b,"1"显示正确
(integer) 1
192.168.74.70:6379> sadd set a   #输入键值a,"0"显示错误,已存在这个元素
(integer) 0
192.168.74.70:6379> sismember set a  #查询已存在为"1"
(integer) 1
192.168.74.70:6379> sismember set t #查询不存在为"0"
(integer) 0
192.168.74.70:6379> srem set a  #删除元素a
(integer) 1
192.168.74.70:6379> sismember set a  #元素a不存在,已成功删除
(integer) 0
192.168.74.70:6379> sadd set e
(integer) 1
192.168.74.70:6379> sadd set l
(integer) 1
192.168.74.70:6379> smembers set
1) "e"
2) "l"
3) "b"
192.168.74.70:6379> sadd set a1
(integer) 1
192.168.74.70:6379> sadd set a3
(integer) 1
192.168.74.70:6379> smembers set  #字母为无序集合
1) "a1"
2) "e"
3) "l"
4) "b"
5) "a3"
192.168.74.70:6379> sadd set 1
(integer) 1
192.168.74.70:6379> sadd set 2
(integer) 1
192.168.74.70:6379> sadd set 9
(integer) 1
192.168.74.70:6379> sadd set 4
(integer) 1
192.168.74.70:6379> sadd set 19
(integer) 1
192.168.74.70:6379> sadd set 6
(integer) 1
192.168.74.70:6379> smembers set  #数字也为无序集合
1) "6"
2) "4"
3) "19"
4) "1"
5) "9"
6) "2"

5.5、Zset(sorted set:有序集合)

192.168.74.70:6379> zadd zset 1 val1
(integer) 1
192.168.74.70:6379> zadd zset 1 val2
(integer) 1
192.168.74.70:6379> zadd zset 3 val3
(integer) 1
192.168.74.70:6379> zadd zset 4 val4
(integer) 1
192.168.74.70:6379> zadd zset 5 val5
(integer) 1
192.168.74.70:6379> zrangebyscore zset 0 8  #有序集合
1) "val1"
2) "val2"
3) "val3"
4) "val4"
5) "val5"
192.168.74.70:6379> zrangebyscore zset 0 8 withscores #连带分数从小到大1) "val1"2) "1"3) "val2"4) "1"5) "val3"6) "3"7) "val4"8) "4"9) "val5"
10) "6"

Redis的配置及与memcached区别相关推荐

  1. oracle定时器定时删除30天前的数据_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  2. redis 存储数据不设置过期时间 会自动过期吗_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  3. 定时器取数据时实时进来的数据_Redis-数据淘汰策略amp;持久化方式(RDB/AOF)amp;Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  4. Redis、Memcache和MongoDB的区别

    >>Memcached Memcached的优点: Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环 ...

  5. linux redis 主从配置,redis集群(主从配置)

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合)和zset(有序集合).这些数据 ...

  6. php redis 主从配置,Redis主从及其PHP扩展安装配置

    1.Redis简介Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序 ...

  7. Redis主从配置和集群配置

    Redis主从配置和集群配置 文章目录 Redis主从配置和集群配置 一.Redis主从配置 1.主从概念 2.主从配置 3.数据操作 二.Redis集群配置 1.简介 2.Redis 集群好处 3. ...

  8. Redis安装配置(Linux)

    Redis 是一个高性能的key-value存储数据库.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  9. Redis 安装配置开机启动整合SpringBoot以及配置文件详解

    安装 Redis # 下载Redis wget https://download.redis.io/releases/redis-6.0.9.tar.gz# 解压 redis tar -zxvf re ...

最新文章

  1. C和C++安全编码笔记:总结
  2. MIT录取不再参考「美国高考」学科测验成绩:美国大学已全部宣告脱钩
  3. C语言——日常刷题(一)
  4. linux ls的所有参数,Linux ls命令参数详解
  5. oracle 触发器 select :new,帮忙看下这个oracle触发器,在select后面的where语句有有关问题,但不知道什么有关问题...
  6. 测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站
  7. 注解由谁读取并解析的?
  8. 超全!嵌入式必懂的CAN总线一文讲通了
  9. java标量替换_JAVA逃逸分析、栈上分配、标量替换、同步消除
  10. 再有人问你什么是ThreadLocal,就把这篇文章甩给他!
  11. 下班约会时来了新需求,咋办?
  12. MTK 驱动开发(3)---GPIO口的使用方法汇总
  13. Action三种编写方式
  14. 【音视频数据数据处理 2】【YUV篇】将YUV420P_I420数据旋转90°-180°-270°-镜像旋转
  15. 从菜鸟到架构师(三)
  16. TypeScript的枚举
  17. 订单导出(1688)
  18. 【学习笔记】使用魔数快速求平方根
  19. React Native之样式
  20. 《俄罗斯方块》项目简介

热门文章

  1. 腾讯企业邮箱登录入口在哪?知名企业邮箱品牌登录方法大全!
  2. Java习题练习:和尚挑水
  3. Codeforces 13C
  4. 测试 zxdfasd阿斯顿水电费健康sdgfsdgsg的发oip挥加快了地方噶是的
  5. 如何获得的office 365 年卡
  6. 预测2019浙大计算机考研分数,2019年浙江大学考研复试分数线已出现
  7. ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n
  8. 面试难,应聘难,好工作,今安在?——《编程之美——微软技术面试心得》为你探路!即将上市,敬请关注!
  9. poi3.17版本生成excel文件时,单元格生成求和公式
  10. 何时调用构造函数和析构函数