Redis简介
- 什么Redis
- Redis是一个完全开源免费,遵守BSD协议,是一个高性能(NOSQL)的key-value 数据库。
- Redis特点
- 性能极高 Redis能度的速度是110000次/s.写的速度是81000次/s
- 丰富的数据类型 String Hash List Set 及 Ordered Set 数据类型操作
- 原子性 Redis的所有操作都是原子性的,意思是要么成功,要么失败,完全不执行,单个操作是原子性的,多个操作也支持事务,即原子性,通过MULTI 和EXEC执行包起来。
- Redis缺点
- 持久化 Redis直接将数据存储到内存中,要将数据保存到磁盘上,Redis可以使用两种方式实现持久化过程。定时快照:每隔一段时间将整个数据库写到磁盘上,每次均是写全部数据,代价非常高。第二种方式基于语句追加(aof),值追踪变化的数据,但是追加的log可能过大,同时所有的操作均重新执行一遍 ,恢复速度慢。
- 耗内存 占用内存过高,单机版的redis处理能力有限,无法高可用
Redis的安装
Redis 在linux上面安装方式
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -zxvf redis-5.0.7.tar.gz -C /opt/ #将解压后的文件存储到/opt/下
cd redis-5.0.7 #进入解压后的目录
# 注意redis使用c语言编写的 因此需要gcc编译器 yum -y install gcc automake autoconf libtool make gcc-c++
make
#执行安装目录进行安装
make PREFIX=/usr/local/redis install #将redis安装在/usr/local/redis下
如果出现安装失败 记得清除之前编译出错的文件 使用以下的命令,然后再重新编译make distclean
启动redis服务
#在安装目录下/usr/local/redis/bin下执行
./redis-server
启动redis客户端
执行命令 进入redis安装目录/usr/local/redis./bin/redis-cli
启动redis客户端命令语法redis-cli -h IP地址 -p 端口 //默认IP本机 端口6379
退出客户端
CTRL+C
Redis中内存维护策略
redis作为优秀的中间缓存件,时常会存储大量的数据,即使采取了集群部署来动态扩容,也应该即使的整理内存,维持系统性能。
在redis中有两种解决方案
一 为数据设置超时时间
设置过期时间
expire key time(以秒为单位) 这是常用的方式 设置key的过期时间
setex key seconds value -字符串独有的方式
命令介绍
ttl key
查看key剩下的有效时间
keys *
查看所有的数据
ttl key返回值是-1的话 是永久生效 如果是-2表示键失效
- 除了字符串有自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间
- 如果没有设置时间 那缓存就是永不过期
- 如果设置了过期时间,之后又想让缓存永不过期,使用 persist key
二 采用LRU算法动态将不用的数据删除
自定义配置redis
进入对应的安装目录 /usr/local/redis
修改redis.conf 配置文件
damonize no 修改为daemonize yes 守护进程启动
bind 127.0.0.1 注释掉 允许除本机以外的机器访问redis服务
reuirepass 设置密码 设定数据库密码
使用自己的redis.conf启动redis
./redis-server ../redis.conf
使用密码登录redis
./redis-cli -a 密码
Redis关闭
- 第一种关闭方式
(断电,非正常关闭,容易数据丢失)
查询redis进程idps aux | grep redis
kill -9 pid
该种方式只会根据配置文件中设置的保存秒数来进行保存save <seconds> <changes>
- save 900 1 即监测 如果到900秒后有1个数据发生变化就会将数据同步到文件中即 dump.rdb文件中
1. 2. firewall-cmd --state 开启防火墙
systemctl start firewalld.service 永久开放6379端口
firewall-cmd --znotallow=public --add-port=6379/tcp --permanent
- 第二种关闭方式
(正常关闭 数据会保存)
在客户端执行shudown操作 - Redis远程连接
centos版本是7 防火墙的命令和centos6的差别非常大
查看防火墙状态
Redis常用的命令
redis的数据类型 string (字符串) hash (hash) list (列表) set (集合)和 zset(sorted set:有序集合)
常用命令key管理
keys * - 查询满足的所有键 可以模糊查询 比如 keys abc*
exists key - 是否存在执行的key
expire key second - 设置某个key的过期时间 时间为妙
del key - 删除某个key
ttl key - 查询距离过期的时间 当key不存在时 返回值-2 存在但是没有设置剩余生存时间时 返回-1 以秒为单位
persist key - 取消过去时间
PERPIRE key milliseconds - 修改key的过期时间 为毫秒
select : - 选择数据库 数据库为0-15 ;select 2
move key dbindex - 将当前的数据key转移到其他数据库
randomkey - 随机返回一个key
rename key key2 - 重命名key
echo : - 打印命令
dbsize : - 查询数据库的key数量
info - 查看数据库信息
config get - 实时转储收到的请求 返回相应的配置
flushdb - 清空当前数据库
flushall - 清空所有数据库
String 命令
赋值语法
set key value
直接赋值多次赋值会覆盖
setnx key value
如果key不存在的话就赋值为value 如果存在不赋值
setex key seconds value
设置具有过期时间的键值对
SETRANGE string offset value
替换字符串
egg:
取值语法
get key
取值
getrange key start end
包含start 和end位置的字符
getset key value
命令用于设置指定key的值 并返回key的旧值 当key 不存在返回nil
strlen key
返回key锁储存字符串的长度
删值语法
del key 删除指定的key 如果存在返回值数字类型
批量写 mset k1 v1 k2 v2 … 一次性写入多个值
批量读 mget k1 k2 k3 …
自增自减incr key
自增 incrby key 增量值decr key
自减 decrby key 增量值incrby key increment
增加步长
List命令
lpush person sofency alice sophia //向链表中添加元素 多个值
lrange person 0 -1 //展示列表中所有的元素
lpop person 从列表的左边弹出
rpop person 从列表的右边弹出
lset person 0 alice //替换下标为0的元素 如果不存在值 或者下表越界 会出错
linsert person after|before "sofency" "hhh" //在sofency字段之前插入hhh
Hash命令
可以看做存储的是对象
hset key filed value
设置一个域的值 对应的取值 hget key filed
hmset key field1 value1 field2 value2 ...
对应的取值 hmget key field1 filed2
hgetall key 获取所有的字段
删除特定的字段
hdel key field field1
删除一个或者多个field
hlen key
获取hash表中字段的数量
hkeys key
获取hash表中所有的字段
set命令
添加
sadd student sofency alice// 向里面添加元素
smembers student //展示里面所有的元素
spop student //随机移除元素
//并交叉
//对于共同关注来说,我们需要这样做
sadd key1 a b c
sadd key2 a d f
sdiff key1 key2 key2和key1不同的元素 显示的是 d f
sdiff key2 key1 key1和key2不同的元素 显示的是 b c
sinter key1 key2 key1和key2共有的元素 a