Redis:非关系型数据库,缓存型数据库。
关系型是一个结构化的数据库,他的记录方式是行和列(列声明对象的,行记录对象的属性)
表与表之间是有关联的,使用sql语句,来对指定的表,库,进行增删改查
在创建表时,我们是设计好了表的结构,按照表的结构来存储数据,数据与表结构不匹配,存储数据库,会失败
nosql not only sql
不需要定义库,也不需要定义表的结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)Redis key:value 键值对形式存储,每个键之间没有直接关联,库与库之间互相独立
Web2.0:核心,交互
数据库缓存
Web页面缓存
CPU和硬盘之间的缓存
库-----表----------行, 列------------>存储数据
非关系型数数据库:
库------集合------>键值对
他不需要手动的创建库和集合
开源的,使用C语言编写的NQL数据库
Redis:基于内存运行的,支持持久化(数据恢复),采用的就是key-values(键值对)的存储形式,目前在分布式架构中是非常重要的一环
生产时常见的架构:
Redis服务器程序,是一个单进程模式,既一个主进程工作,也就是说在一台服务器上可以启动多个Redis(端口号不要冲突),Redis的实际处理速度是完全依靠主进程的执行效率,服务器只部署了一个Redis进程,多个客户端访问,可能会导致Redis处理能力下降
如果部署了多个Redis进程,虽然提高了Redis并发处理能力,但是会给服务器的CPU很大的压力
一台服务器,一般部署3个Redis进程(根据情况来看,高并发,要部署多个,一般的情况,单进程够用)
*特殊说明*:Redis的读写仍然是单进程处理。
依赖环境:
yum install -y gcc gcc-c++ make
编译:
安装:
make PREFIX=/usr/local/redis install
./install_server.sh
/usr/local/redis/bin/redis-server
Selected config:
Port : 6379 #默认侦听端口为6379
Config file : /etc/redis/6379.conf #配置文件路径
Log file : /var/log/redis_6379.log #日志文件路径
Data dir : /var/lib/redis/6379 #数据文件路径
Executable : /usr/local/redis/bin/redis-server #可执行文件路径
Cli Executable : /usr/local/bin/redis-cli #客户端命令工具
#把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/
Redis的服务控制的命令:
/etc/init.d/redis_6379 stop start restart status
修改配置文件
vim /etc/redis/6379.conf
70行添加本地IP地址
137行
167行
重启
Redis-server:直接启动Redis,只能启动
Redis-benchmark:检测Redis在本机的运行效率
Reid-cil:命令行工具
Reid-check-aof:检测AOF文件是否正常
Redis-check-rdb:检测rdb文件是否正常
Redis-benchmark:是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。
基本的测试语法:redis-benchmark [选项] [选项值]。
-h 指定服务器的主机名IP地址
-p 指定服务器的端口号
-c 指定并发连接数
-n 指定请求数
-q 强制退出
-d 数据包数
#向 IP 地址为 20.0.0.51、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 20.0.0.51 -p 6379 -c 100 -n 100000
#测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 20.0.0.51 -p 6379 -q -d 100
#测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能
redis-benchmark -t set,lpush -n 100000 -q
redis-cli -h 20.0.0.52 -p 6379 即可登录本地,还可以远程登录
-h 指定IP地址
-p 指定端口号
-a 指定登录密码
redis-cli 直接使用,仅限于本地登录,远程登录还需指定IP地址
set:存放数据,命令格式为 set key value
get:获取数据,命令格式为 get key
# keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
127.0.0.1:6379> set k1 1
127.0.0.1:6379> set k2 2
127.0.0.1:6379> set k3 3
127.0.0.1:6379> set v1 4
127.0.0.1:6379> set v5 5
127.0.0.1:6379> set v22 5
127.0.0.1:6379> KEYS v* #查看当前数据库中以 v 开头的数据
127.0.0.1:6379> KEYS v? #查看当前数据库中以 v 开头后面包含任意一位的数据
127.0.0.1:6379> KEYS v?? #查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据
# exists 命令可以判断键值是否存在。
127.0.0.1:6379> exists teacher #判断 teacher 键是否存在
(integer) 1 # 1 表示 teacher 键是存在
127.0.0.1:6379> exists tea
(integer) 0 # 0 表示 tea 键不存在
# del 命令可以删除当前数据库的指定 key。
127.0.0.1:6379> keys *
127.0.0.1:6379> del v5
127.0.0.1:6379> get v5
也是Redis最基本的类型,最大能存储512MB的数据,可以存储任何数据,比方说数字,文字,图片,等等
PS:APPEND
APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)
exists home
#判断该键是否存在,存在返回1,否则返回0
append home "cat"
#该键并不存在,因此append命令返回当前Value的长度
append home "dog"
#该键已经存在,因此返回追加后Value的长度
get home
#通过get命令获取该键,以判断append的结果
如和查看键值对的类型
type test
Append:APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)
(若键不存在,则相当于创建)
补充:
INCR/DECR/INCRBY/DECRBY:
INCR key:key值递增加1(key值必须为整数)
DECR key:key值递减1(key值必须为整数)
Set 可以直接覆盖,自增1和自减1
指定增加和减少
(integer) -2 表示已过期
(integer) -1 表示永不过期
GETSET:
GETSET key value:获取key值并返回,同时给key设置新值
SETEX:
setex key seconds value:设置指定key的过期时间为seconds
#设置缓存过期时间,3600秒
EXPIRE mycount 3600
对已有键值对设置生命周期
EXPIRE wang 30
(integer) -2 表示已过期
(integer) -1 表示永不过期
SETNX key value:不存在键的话执行set操作,存在的话不执行
同时打印多个键值对
MSET/MGET/MSETNX:
MSET key value [key value …]:批量设置键-值对
MGET key [key …]:批量获取键值对
获取指定长度的字符
概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
LPUSH key value [value …]在头部(左侧)依次插入列表元素
LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量
LRANGE key start stop:取从位置索引start到位置索引stop的所有元素(所以以0开始)
创建
查看(倒序)
#取从位置0开始到位置2结束的3个元素。
#取链表中的全部元素,其中0表示第一个元素,-1表示最后一一个元素。
指定查看
正续查看
RPUSH wang4 1 2 3 4 5 #正向排列
查看
指定查看
插入数据,不同的插入方法对应不同的
删除lpop#移除并返回mykey键的第一个元素,即从右往左第一个
获取表的元素LLEN
指定索引下标替换LSET
根据值指定位置在前面添加数据
Hash类型用于存储对象,采用hash格式来进行操作,hash格式占用的磁盘空间少,而且一个hash可以存储4294967295个键值对
创建
#给键值为myhash的键设置字段为field1,值为zhang。
#获取键值为myhash,字段为field1的值。
#myhash键中不存在field2字段,因此返回nil.
查看
如何删除元素
查询全部
#hkeys命令仅获取myhash键中所有字段的名字
#hvals命令仅获取myhash键中所有字段的值。
删除
Set数据类型(无序集合)元素的类型也是string,元素是唯一的,不允许重复,多个集合可以进行并集,交集和差集运算,set当中的元素类型是唯一的,可以跟踪一些唯一性的数据,访问微博的用户名,只要把对应名称Redis set集合可以自动保存唯一性,方便下一次访问
清除所有库的所有内容
Flushall(慎用)
创建SADD wang a a c
查看SMEMBERS wang
#获取Set集合中元素的数量
Scard
查看键值,不允许有重复数据
随机移除
SPOP
指定移除
SERM
smove命令
有序集合(zset):有序集合,元素类型也是string,元素唯一,不能重复
每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小。进行排序,元素的权重可以相同
用于一些在线积分的排行榜,可以实时更新用户的分数,可以使用zrange命令回去积分top10的用户,zrank命令通过username来获取用户的排名信息
权重是1,元素是one,权重可以重复,元素不可用重复
创建ZADD
打印所有元素ZRANGE wang 0 -1 withscores
怎么获取位置索引
#获取成员one在Sorted-Set中的位置索引值。0表示第一个位置。
#查看上--条命令是否删除成功
ZCOUNT myzset 1 4
表示权重的范围:1<=score<=4
删除
查看删除之后的结果
查看权重
Set和hset 创建普通类型和hash类型,一般情况下,如无特殊需求,普通的创建方式即可
对一个键进行多字段存储,节省内存,使用hash方式,工作当中set足够
如何set重命名
如和查看当前库键的数量
Redis的库,库都是创建好的库,16个库
数字排名:0-15 每个数据库之间互相独立,互不干扰
如何切换库
如何把当前库的内容,移到其他库
回到默认库
如何给库创建密码
可以进Redis,但是进不了库
如何进库:
在内申明
在外声明
删除库
总结:
Redis的特点:读写速度快
数据类型: