redis

redis

redis 缓存中间件 缓存数据库

nginx web服务

php 转发动态请求

tomcat web页面,也可以转发动态请求。

springboot 自带tomcat

redis也是一个数据库 不单单是一个缓存工具。

redis 非关系型数据库 nosql(not only sql) 不仅仅是sql

键值对形式

key value

test1=test2

键值可以对应任意的值

数据类型不是定义好的类型。

test1=10 string

redis简介:

  1. Redis(远程字典服务器)是一个开源的、使用C语言编写的NoSQL数据库即非关系数据库。

  2. Redis 基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环

  3. Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。

  4. 若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程,若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若CPU资源比较紧张,采用单进程即可。

Redis命中机制和淘汰机制

命中机制:查询数据可以查询到,例如查询100条可以查询到20条即命中20条

淘汰机制:Redis缓存的是高热数据,若负载高于限制则淘汰一些最近没有访问的数据,即删除

redis的优点:

1、极高的读写速度,读速度可以达到110000次/s 写速度可以达到81000次/s

2、支持丰富的数据类型,键值对可以定义多种数据类型 string(字符串) list (列表) hash(散列) set (无序集合) sorted set(有序集合)

3、支持数据持久化,内存当中的数据保存到磁盘

4、原子性,redis所有操作都是原子性的。

5、支持主从模式和高可用模式(哨兵模式),以及集群。

redis的使用场景

redis基于内存的数据库,缓存是最常应用的场景。

排行榜

计数器

存储关系

实时分析记录,日志系统。

缓存的概念:

缓存是一种用于存储临时数据副本的技术。目的就是提高访问速度和性能。

缓存通常位于数据的访问路径上,数据的必经之路。可以在不直接访问原始数据的情况下,可以直接获取数据。

缓存的应用场景:

web缓存

数据库缓存

对象缓存(大数据应用)

redis安装部署

yum install -y   gcc  gcc-c++ make 
#安装工具
cd /opt 
#进入opt目录将软件包上传
tar  zxvf  redis-5.0.7.tar
#解压安装包
cd /opt/redis-5.0.7
#进入解压的文件夹中
make 
#将源代码转换成二进制
 make install prefix=/usr/local/redis
#安装进硬盘,永久保存在硬盘上 指定安装目录到/usr/local/redis
cd /opt/redis-5.0.7/utils 
#进入到安装目录执行安装脚步
./install_server.sh
#执行安装脚步
Please select the redis port for this instance: [6379]
#第一个是询问设置redis端口不设置直接回车则默认是6379
Please select the redis config file name [/etc/redis/6379.conf]
#第二个询问设置redis主配置文件路径,不设置直接回车则是/etc/redis/6379.conf此文件
Please select the redis log file name [/var/log/redis_6379.log]
#第三个询问设置redis日志文件位置,不设置直接回车是/var/log/redis_6379.log文件
Please select the data directory for this instance [/var/lib/redis/6379]
#第四个询问设置管理redis的RDB文件保存路径不设置直接回车是/var/log/redis_6379.log文件
Please select the redis executable path [/usr/local/bin/redis-server]
#第五个设置redis执行文件路径redis-cli等若设置则直接填写,比如设置为/usr/local/redis/bin/redis-server。
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
#询问是否配置完成确认安装,回车表示配置完成确认安装,Ctrl-C终止安装
netstat  -antp |grep 6379
#安装完成后redis是自动启动的。查询是否有redis进程有则安装成功
ln -s /usr/local/redis/bin/* /usr/local/bin/
#把redis的可执行程序文件放入路径环境变量的目录中便于系统识别即可以在任何位置使用此文件内命令

redis-cli-h 192.168.60.30 -p 6379

-h 指定ip地址

-p 指定端口

-a 密码(没有密码可以不加)

redis-cli 命令行工具

redis-server start stop restart 控制redis

redis-benchmark 检测redis在本机的运行效率

redis-check-aof 修复aof持久化的文件

redis-check-rdb 修复rdb持久化的文件

redis-benchmark  -h 192.168.60.30  -p 6379  -c  100 -n  100000
​
向redis的主机模拟发送100个并发连接,同时发送10W个请求测试
redis-benchmark -h 192.168.60.30  -p 6379  -q -d 100
​
模拟存储100个数据包的性能测试

redis-benchmark测试工具

redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

基本的测试语法:redis-benchmark [选项] [选项值]

选项

-h :指定服务器主机名。
-p :指定服务器端口。
-s :指定服务器 socket
-c :指定并发连接数
-n :指定请求数。
-d :以字节的形式指定 SET/GET 值的数据大小。
-k :1=keep alive 0=reconnect 。
-r :SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P :通过管道传输<numreq>请求。
-q :强制退出 redis。仅显示 query/sec 值。
--csv :以 CSV 格式输出。
-l :生成循环,永久执行测试。
-t :仅运行以逗号分隔的测试命令列表。
-I (大写):Idle 模式。仅打开 N 个 idle 连接并等待

redis数据库常用的命令:

基础数据类型:

String

String是 redis 最基本的类型,最大能存储 512MB 的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等。默认是此数据类型

List

列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素

Hash(散列类型)

hash用于存储对象,可以采用这样的命名方式(hash格式):对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。

set无序集合

元素类型为string类型,元素具有唯一性, 不允许存在重复的成员。多个集合类型之间可以进行并集、交集和差集运算

sorted set

a、有序集合,元素类型为Sting,元素具有唯一性, 不能重复。b、每个元素都会关联–个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。

reids数据类型删除
stringsetgetdel
listlpushlrangedel
hashhsethmget/hgetalldel
setsaddsmembersdel
sorted setzaddzrangedel

set 创建数据

get 获取数据

keys    *   #查看当前数据库中所有键
keys    v*  #查看当前数据库中以v开头的数据
keys    v?  #查看当前数据库中以v开头后面包含任意一位的数据
keys    v?? #查看当前数据库中以v开头后面包含两位的数据
exists  test1   #有就输出1,没有就输出0
type    test1   #查看键值对的类型
del test1   test2   #空格隔开可以删除多个
rename  test1   test4   #修改键值对的名称
config  set requirepass 123456  #创建密码
auth    123456

string类型 是redis的基础类型 最大能够存储512MB的数据

数字,图片等等都是默认string类型

append 追加

192.168.60.30:6379> append chengqian shuai
(integer) 5
192.168.60.30:6379> keys *
1) "chengqian"
192.168.60.30:6379> append chengqian zhendema
(integer) 13
192.168.60.30:6379> get chengqian
"shuaizhendema"

自增自减 1

192.168.60.30:6379> set mykey 20
OK
192.168.60.30:6379> incr mykey
(integer) 21
192.168.60.30:6379> get mykey
"21"
192.168.60.30:6379> decr mykey
(integer) 20

指定增多少减多少

192.168.60.30:6379> incrby mykey 10
(integer) 30
192.168.60.30:6379> decrby mykey 20
(integer) 10

#15秒之后库就不存在了
192.168.60.30:6379> setex mykey 15 hello
OK
192.168.60.30:6379> ttl mykey
(integer) 14
192.168.60.30:6379> ttl mykey
(integer) 10
192.168.60.30:6379> ttl mykey
(integer) 9
192.168.60.30:6379> ttl mykey
(integer) 8
192.168.60.30:6379> ttl mykey
(integer) 7
192.168.60.30:6379> ttl mykey
(integer) 6
192.168.60.30:6379> ttl mykey
(integer) 5
192.168.60.30:6379> ttl mykey
(integer) 2
192.168.60.30:6379> ttl mykey
(integer) 1
192.168.60.30:6379> ttl mykey
(integer) -2
#查看有几个键值对
192.168.60.30:6379> DBsize
(integer) 1

每个库都是独立的,互不影响。

flushdb     #清空当前库(不要用)
flusall     #清空所有的库(更不要用)
#一次性创建多个键值对
192.168.60.30:6379> mset test1 1 test2 2 test3 3
OK
192.168.60.30:6379> keys *
1) "chengqian"
2) "test1"
3) "test2"
4) "test3"
#一次性查看多个键值对
192.168.60.30:6379> mget test1 test2 test3
1) "1"
2) "2"
3) "3"

列表 list

192.168.60.30:6379> LPUSH mykey a b c d
(integer) 4
192.168.60.30:6379> LRANGE mykey 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
#-1 是最后一个位置
192.168.60.30:6379> LRANGE mykey 0 2
1) "d"
2) "c"
3) "b"
#0是起始位置,2是索引位置
192.168.60.30:6379> lpushx mykey e
(integer) 5
#往已有的一个
192.168.60.30:6379> LRANGE mykey 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
#从头开始插数据
192.168.60.30:6379> lpop mykey 
"e"
192.168.60.30:6379> lpop mykey 
"d"
#从头开始移除数据
192.168.60.30:6379> llen mykey
(integer) 3
#查看
192.168.60.30:6379> lrem mykey 2 a  #删除两个等于a的值
(integer) 1

#替换值
192.168.60.30:6379> lset mykey 5 10
OK
192.168.60.30:6379> LRANGE mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "10"
#在指定值的前面插入一个数据
192.168.60.30:6379> linsert mykey after e 8
(integer) 7
192.168.60.30:6379> LRANGE mykey 0 -1
1) "f"
2) "e"
3) "8"
4) "d"
5) "c"
6) "b"
7) "10"

#从左往右建数据
192.168.60.30:6379> rpush mykey1 a b c d e
(integer) 5
192.168.60.30:6379> LRANGE mykey1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"

hash类型

hash类型 散列 用来存储对象,对象类别和ID构成键名

hash存储的空间很小,占用的内存和持久化后的磁盘空间都很少。

hset myhash id 1
#id 是对象
#1是键值
192.168.60.30:6379> hset myhash id1 1 id2 2 id3 3
(integer) 3
192.168.60.30:6379> hget myhash id1     #查看指定对象的键值
"1"
192.168.60.30:6379> hlen myhash     #查看里面有几个对象
(integer) 3
192.168.60.30:6379> hdel myhash id1 id2 id3     #只能一个一个删
192.168.60.30:6379> hmget myhash id1 id2 id3    #一次显示多个指定对象的值
1) "1"
2) "2"
3) "3"
192.168.60.30:6379> hgetall myhash      #显示所有对象和对应的值
1) "id1"
2) "1"
3) "id2"
4) "2"
5) "id3"
6) "3"
192.168.60.30:6379> hkeys myhash        #显示所有对象
1) "id1"
2) "id2"
3) "id3"
192.168.60.30:6379> hvals myhash        #显示所有值
1) "1"
2) "2"
3) "3"

hash是一个键值对,包含多个对象和对象的值

myhash就是一个hash值,一个hash值可以存4,294,967,295个键值对。

192.168.60.30:6379> hsetnx myhash id4 4     #往里面添加对象,该对象不能存在,否则报错
(integer) 1
192.168.60.30:6379> hgetall myhash
1) "id1"
2) "1"
3) "id2"
4) "2"
5) "id3"
6) "3"
7) "id4"
8) "4"

set集合 无序集合

元素类型只能是string,无序集合当中元素具有唯一性,不允许重复

应用场景,set的数据来追踪唯一性的数据,比方说IP地址或者根据客户的id区分不同客户购买的同一产品。

192.168.60.30:6379> sadd myset a b b c
(integer) 3
192.168.60.30:6379> smembers myset
1) "c"
2) "b"
3) "a"
192.168.60.30:6379> sadd myset a b  d e
(integer) 2
192.168.60.30:6379> smembers myset
1) "d"
2) "c"
3) "b"
4) "a"
5) "e"
192.168.60.30:6379> scard myset     #获取当前集合值的数量
(integer) 5
192.168.60.30:6379> srandmember myset       #随机查询一个值
"c"
192.168.60.30:6379> srandmember myset
"e"
192.168.60.30:6379> srandmember myset
"a"
192.168.60.30:6379> spop myset      #随机删除一个值
"a"
192.168.60.30:6379> srem myset d    #指定删除一个值,也可以指定删除多个
(integer) 1
192.168.60.30:6379> smove myset myset2 e    #把myset中的一个值移动到myset2中
(integer) 1
192.168.60.30:6379> smembers myset
1) "b"
2) "c"
192.168.60.30:6379> smembers myset2
1) "d"
2) "c"
3) "e"
4) "b"

sorted set(zset),有序集合

元素类型都是string 元素唯一,不能重复

每个元素都会关联一个doublel类型的分数score(表示权重),提过权重的大小进行排序,权重可以相同。

192.168.60.30:6379> zadd myzset 1 "one" 2 "two" 3 "three"
(integer) 3
192.168.60.30:6379> zrange myzset 0 -1 withscores   #权重是1,2,3
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
192.168.60.30:6379> zrange myzset 0 -1      #显示成员
1) "one"
2) "two"
3) "three"
192.168.60.30:6379> zrangebyscore myzset 2 5    #权重在大于等于2,小于等于5的显示出来
1) "two"
2) "five"
3) "one"
4) "three"
5) "four"
6) "six"
#倒序查找
192.168.60.30:6379> zrevrange myzset 1 3
1) "four"
2) "three"
3) "one"
192.168.60.30:6379> zrange myzset 0 -1 withscores
 1) "two"
 2) "2"
 3) "five"
 4) "3"
 5) "one"
 6) "3"
 7) "three"
 8) "3"
 9) "four"
10) "4"
11) "six"
12) "4"

string 基本类型

list 列表

hash 散列,一个hash可以存储多个对象和对象值,对象名不可重复。

set 无序集合,没有重复,没有权重 string类型

zset 有序集合,没有重复,可以按照权重进行排序 string类型

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值