redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件

高速缓存介绍

  • 高速缓存利用内存保存数据,读写速度远超硬盘
  • 高速缓存可以减少 I/O 操作,降低 I/O 压力

  • Redis是Vmware开发的开源免费的KV型NoSQL缓存产品
  • Redis具有很好的性能,最多可以提供10万次/秒的读写
  • 目前新浪微博团队组建了世界上最大规模的Redis集群

Redis的安装方式

Redis的安装方式有很多,如果之前我们利用yum安装过Redis,可以对其进行卸载后再用源码编译安装

卸载通过yum安装的redis数据库:

yum remove redis -y 

yum安装redis

1.yum安装

1
2
3
4
5
6
7
#前提得配置好阿里云yum源,epel源
#查看是否有redis包
yum list redis
#安装redis
yum install redis -y
#安装好,启动redis
systemctl start redis

2.检测redis是否工作

1
2
3
4
redis-cli    #redis 客户端工具
#进入交互式环境后,执行ping,返回pong表示安装成功
127.0.0.1:6379> ping
PONG

源码安装redis,编译安装

编译安装的优势是:

  • 编译安装时可以指定扩展的module(模块),php、apache、nginx都是一样有很多第三方扩展模块,如mysql,编译安装时候,如果需要就定制存储引擎(innodb,还是MyIASM)
  • 编译安装可以统一安装路径,linux软件约定安装目录在/opt/下面
  • 软件仓库版本一般比较低,编译源码安装可以根据需求,安装最新的版本

通过源码编译安装:

1
2
3
4
5
6
7
8
9
10
1.下载redis的源代码
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解压缩源码
tar -zxf redis-4.0.10.tar.gz
3.进入redis源码目录,编译安装,生成可执行命令
redis不需要执行configure,因为他已经有了makefile
4.通过如下2个命令,生成redis的可执行文件
make && make install
make install 安装到指定目录,默认在/usr/local/bin
5.此时已经可以启动redis服务端了  

redis可执行文件:

1
2
3
4
5
6
./redis-benchmark //用于进行redis性能测试的工具
./redis-check-dump //用于修复出问题的dump.rdb文件
./redis-cli //redis的客户端
./redis-server //redis的服务端
./redis-check-aof //用于修复出问题的AOF文件
./redis-sentinel //用于集群管理

安全性能下的启动redis ,在redis.conf中,更改默认端口,添加密码,开启安全模式

在redis.conf配置文件中进行过滤

1
2
grep -"^#" redis.conf | grep -"^$"     过滤出 空白行,以及注释行以外的,有用信息
egrep -"(^#|^$)" redis.conf  

redis配置文件:

手动创建Redis配置文件

1
2
3
4
5
6
7
8
touch  pingredis.conf
#pingredis.conf 内容如下
[root@master redis-4.0.10]# cat pingredis.conf
bind 0.0.0.0
protected-mode yes       安全模式
port 6888
daemonize yes              后台运行
requirepass  123 

redis启动:

启动redis服务端,指定配置文件

1
2
3
redis-server pingredis.conf
 
默认情况下,redis-server会以非daemon的方式来运行,且默认服务端口为6379。 

使用redis客户端

1
2
3
redis-cli  -6888
进入之后,可以通过auth指令,进行redis密码验证
验证通过后,可以发送ping,得到pong代表redis正常 

 redis 远程连接(Windows进行连接)

Windows命令提示符下

1
2
3
4
5
6
7
8
9
C:\WINDOWS\system32>pip install redis 
 
C:\WINDOWS\system32>python
>>> import redis
>>> conn = redis.Redis(host="192.168.1.103", port="6888", password="ping")
>>> conn.set("hello","world")
True
>>> conn.get("hello")
b'world'

linux下:

1
2
3
4
5
6
7
[root@localhost /]# redis-cli -p 6888
127.0.0.1:6888> auth ping
OK
127.0.0.1:6888> keys *
1"hello"
127.0.0.1:6888> get hello
"world"

Redis数据结构

清空所有的键FLUSHDB

1
2
3
4
5
6
redis是一种高级的key:value存储系统,其中value支持五种数据类型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)  

基本命令

1
2
3
4
5
6
7
8
9
10
11
set key value  #设置一个键值对
get key    #获取key的值
keys *         查看所有key
type key      查看key类型
expire key seconds    过期时间
ttl key     查看key过期剩余时间        -2表示key已经不存在了
persist     取消key的过期时间   -1表示key存在,没有过期时间
 
exists key     判断key存在    存在返回1    否则0
del keys     删除key    可以删除多个
dbsize         计算key的数量 

数据结构示例:

1.strings类型

  • set   设置key
  • get   获取key
  • append  追加string
  • mset   设置多个键值对
  • mget   获取多个键值对
  • del  删除key
  • incr  递增+1
  • decr  递减-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
127.0.0.1:6379set name 'ping'   #设置key
OK
127.0.0.1:6379> get name    #获取value
"ping"
127.0.0.1:6379set name 'pong'  #覆盖key
OK
127.0.0.1:6379> get name    #获取value
"pong"
127.0.0.1:6379> append name ' ddd'   #追加key的string
(integer) 7
127.0.0.1:6379> get name  #获取value
"pongddd"
127.0.0.1:6379> mset user1 'zhangsan' user2 'lisi'    #设置多个键值对
OK
127.0.0.1:6379> get user1    #获取value
"zhangsan"
127.0.0.1:6379> get user2    #获取value
"lisi"
127.0.0.1:6379> keys *      #找到所有key
1"user2"
2"name"
3"user1"
 
127.0.0.1:6379> mget user1 user2 name   #获取多个value
1"zhangsan"
2"lisi"
3"pongddd"
127.0.0.1:6379del name        #删除key
(integer) 1
127.0.0.1:6379> get name        #获取不存在的value,为nil
(nil)
127.0.0.1:6379set num 10    #string类型实际上不仅仅包括字符串类型,还包括整型,浮点型。redis可对整个字符串或字符串一部分进行操作,
                                  而对于整型/浮点型可进行自增、自减操作。
OK    
127.0.0.1:6379> get num
"10"
127.0.0.1:6379> incr num    #给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,可以用作计数器
(integer) 11
127.0.0.1:6379> get num  
"11"
 
127.0.0.1:6379> decr num      #递减1 
(integer) 10
127.0.0.1:6379> decr num    #递减1
(integer) 9
127.0.0.1:6379> get num
"9"

  

2.list类型

  • lpush         从列表左边插
  • rpush         从列表右边插
  • lrange          获取一定长度的元素  lrange key  start stop
  • ltrim               截取一定长度列表
  • lpop                 删除最左边一个元素
  • rpop                     删除最右边一个元素
  • lpushx/rpushx                key存在则添加值,不存在不处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
lpush duilie 'zhangsan' 'lisi'   #新建一个duilie,从左边放入三个元素
 
llen duilie  #查看duilie长度
 
lrange duilie 0 -1  #查看duilie所有元素
 
rpush duilie 'wangwu'   #从右边插入chaoge
 
lpushx duilie2  'dsb'  #列表存在则添加 dsb元素,列表不存在则不作处理
 
ltrim duilie 0 2  #截取队列的值,从索引0取到2,删除其余的元素
 
lpop #删除左边的第一个
rpop #删除右边的第一个

  

3.sets集合类型

redis的集合,是一种无序的集合,集合中的元素没有先后顺序。

集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:

  • sadd/srem   添加/删除 元素
  • sismember   判断是否为set的一个元素
  • smembers    返回集合所有的成员
  • sdiff             返回一个集合和其他集合的差异
  • sinter           返回几个集合的交集
  • sunion          返回几个集合的并集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sadd zoo  zhangsan lisi wangwu  #添加集合,有三个元素,不加引号就当做字符串处理
 
smembers zoo  #查看集合zoo成员
 
srem zoo  zhangsan #删除zoo里面的zhangsan
 
sismember zoo lisi  #返回改是否是zoo的成员信息,不存在返回0,存在返回1
 
sadd zoo xiaohua   #再把xiaohua加入zoo
 
smembers zoo  #查看zoo成员
 
sadd zoo2 xiaoming xiaochen #添加新集合zoo2
 
sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中没有的元素
 
sdiff zoo2  zoo  #找出zoo2中有,而zoo没有的元素
 
sinter zoo zoo1   #找出zoo和zoo1的交集,都有的元素
 
sunion  zoo zoo1  #找出zoo和zoo1的并集,所有的不重复的元素

  

4.有序集合

都是以z开头的命令

用来保存需要排序的数据,例如排行榜,成绩,工资等。

实例

利用有序集合的排序,排序学生的成绩

1
2
3
4
5
6
127.0.0.1:6888> zadd test 70 zhangsan
(integer) 1
127.0.0.1:6888> zadd test 80 lisi
(integer) 0
127.0.0.1:6888> zadd test 90 wangwu
(integer) 0

  

排行榜,zrevrange 倒叙   zrange正序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6888> zrevrange test 0 -1 withscores
1"wangwu"
2"90"
3"lisi"
4"20"
5"zhangsan"
6"10"
127.0.0.1:6888> zrange test 0 -1 withscores
1"zhangsan"
2"10"
3"lisi"
4"20"
5"wangwu"
6"90"

  

移除有序集合test中的成员,zhangsan给移除掉

1
2
3
4
5
6
7
8
127.0.0.1:6888> zrem test zhangsan
(integer) 1
127.0.0.1:6888> zrange test 0 -1 withscores
1"lisi"
2"20"
3"wangwu"
4"90"
127.0.0.1:6888>

  

返回有序集合test的基数

1
2
127.0.0.1:6888> zcard test
(integer) 2

  

返回成员的score值

1
2
127.0.0.1:6888> zscore test lisi
"20"

  

zrank返回有序集合中,成员的排名。默认按score,从小到大排序。

1
2
3
4
5
6
7
8
9
127.0.0.1:6888> zrange test 0 -1 withscores
1"lisi"
2"20"
3"wangwu"
4"90"
127.0.0.1:6888> zrank test lisi
(integer) 0
127.0.0.1:6888> zrank test wangwu
(integer) 1

  

5.哈希数据结构

哈希结构就是  k1   ->  k1 : v1     如同字典 套字典  { k1 : { k2: v2 }  }   ,取出v2 必须  k1,取出k2

hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。

hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。

  • hset 设置散列值
  • hget  获取散列值
  • hmset  设置多对散列值
  • hmget  获取多对散列值
  • hsetnx   如果散列已经存在,则不设置(防止覆盖key)
  • hkeys     返回所有keys
  • hvals     返回所有values
  • hlen      返回散列包含域(field)的数量
  • hdel     删除散列指定的域(field)
  • hexists    判断是否存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
redis hash是一个string类型的field和value的映射表
 
语法  hset key field value 
 
hset news:1   title "first news title" #设置第一条新闻 news的id为1,添加数据title的值是"first news title"
 
hset news:1 content "news content"    #添加一个conntent内容
 
hget news:1 title   #获取news:1的标题
 
hget news:1  content  #获取news的内容
 
hmget news:1  title content   #获取多对news:1的 值
 
hmset news:2 title "second news title" content "second Contents2"   #设置第二条新闻news:2 多个field
 
hmget news:2 title  content #获取news:2的多个值
 
hkeys news:1   #获取新闻news:1的所有key
 
hvals news:1   #获取新闻news:1的所有值
 
hlen news:1    #获取新闻news:1的长度
 
hdel news:1 title   #删除新闻news:1的title
 
hlen news:1     #看下新闻news:1的长度
 
hexists news:1 title    #判断新闻1中是否有title,不存在返回0,存在返回1
 
 
 
 
 

Redis的介绍以及安装的更多相关文章

  1. NoSQL数据库之Redis数据库:Redis的介绍与安装部署

     NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的w ...

  2. redis学习(一) redis的介绍与安装

    redis简单介绍 redis全称remote-dictionary-server 直译为远程字典服务器, 是一个高性能的key-value存储系统,也被称为数据结构服务器,因为其所存储的数据值(va ...

  3. 短信登录与注册接口、前端所有方式登录注册页面、redis数据库介绍与安装

    今日内容概要 短信登陆接口 短信注册接口 登陆注册前端 redis介绍和安装 内容详细 1.短信登陆接口 在视图类 user/views.py中修改并添加: from .serializer impo ...

  4. python学习笔记(十一)redis的介绍及安装

    一.redis简介 1.redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库.       2.redis的官网地址,非常好记,是redis.io. ...

  5. Redis基础介绍及安装示例

    1.基本概念 Redis是由Salvatore Sanfilippo(意大利)开发的一个开源的高性能键值存储数据库,于2009年发布第一个版本并与同一年开源,官方站点:http://www.redis ...

  6. Redis简单介绍与安装

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数据存储系统 - 1) Redis将其数据库完全保存在内 ...

  7. Redis介绍以及安装(Linux)

    Redis介绍以及安装(Linux) redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的 ...

  8. 【redis】01Redis的介绍与安装部署

    单元目标: 1.NoSQL介绍 2.Redis的介绍 3.Redis适用场合 4.Redis的安装与部署 5.Redis的数据类型 6.Redis的常用命令 7.Redis的高级应用       通过 ...

  9. Redis介绍和安装

    一. Redis的介绍 Redis 是一个Key-Value存储的系统:它支持存储的value类型有string(字符串),list(列表),set(集合),zset(有序集合):为了保证效率:数据都 ...

随机推荐

  1. 正则表达式在Java中应用的三种典型场合:验证,查找和替换

    正则式在编程中常用,总结在此以备考: package regularexp; import java.util.regex.Matcher; import java.util.regex.Patter ...

  2. 纹理过滤模式中的Bilinear、Trilinear以及Anistropic Filtering

    1. 为什么在纹理采样时需要texture filter(纹理过滤). 我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应textur ...

  3. WeihanLi.Npoi 1.10.0 更新日志

    WeihanLi.Npoi 1.10.0 更新日志 Intro 上周有个网友希望能够导入Excel时提供一个 EndRowIndex 来自己控制结束行和根据字段过滤的,周末找时间做了一下这个 feat ...

  4. 分布式系统监视zabbix讲解五之web监控

    Web 监控 概况 你可以使用 Zabbix 检查几个网站可用性方面. 如果要使用 Web 检测功能,必须在 编译Zabbix 的时候加入 cURL(libcurl) 的支持. 要使用 Web 监控, ...

  5. hystrix(5) 使用

    这一节我们开始了解hystrix执行的主流程,在讲解主流程之前,我们先来看一下怎么使用hystrix. 引入jar <dependency> <groupId>com.netf ...

  6. Java 中 static 的作用

    static 关键字的作用 在 Java 中 static 关键字有4种使用场景,下面分别进行介绍: 1.static 成员变量 public class Student { // 静态成员变量 pr ...

  7. python常用os模块

    OS 模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = os. ...

  8. 本周 GitHub 速览:您的代码有声儿吗?(Vol.38)

    作者:HelloGitHub-小鱼干 摘要:还记得花式夸赞程序员的彩虹屁插件 vscode-rainbow-fart 吗?它后续有人啦!JazzIt 同它的前辈 vscode-rainbow-fart ...

  9. 【大数据】深入源码解析Map Reduce的架构

    这几天学习了MapReduce,我参照资料,自己又画了两张MapReduce的架构图. 这里我根据架构图以及对应的源码,来解释一次分布式MapReduce的计算到底是怎么工作的. ​话不多说,开始! ...

  10. node中的cookie

    为什么需要cookie 我们知道http是无状态的协议,无状态是什么意思呢?我来举一个小例子来说明:比如小明在网上购物,他浏览了多个页面,购买了一些物品,这些请求在多次连接中完成,如果不借助额外的手段 ...