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表示键失效

redis incr 原子性 redis的原子性递增操作_redis

  • 除了字符串有自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间
  • 如果没有设置时间 那缓存就是永不过期
  • 如果设置了过期时间,之后又想让缓存永不过期,使用 persist key

二 采用LRU算法动态将不用的数据删除

redis incr 原子性 redis的原子性递增操作_Redis_02


自定义配置redis

进入对应的安装目录 /usr/local/redis

修改redis.conf 配置文件

damonize no 修改为daemonize yes 守护进程启动
bind 127.0.0.1 注释掉 允许除本机以外的机器访问redis服务
reuirepass 设置密码  设定数据库密码

redis incr 原子性 redis的原子性递增操作_redis_03


使用自己的redis.conf启动redis

./redis-server ../redis.conf使用密码登录redis

./redis-cli -a 密码

redis incr 原子性 redis的原子性递增操作_数据库_04

Redis关闭

  1. 第一种关闭方式
    (断电,非正常关闭,容易数据丢失)
    查询redis进程id
    ps aux | grep rediskill -9 pid 该种方式只会根据配置文件中设置的保存秒数来进行保存
    save <seconds> <changes>
  2. redis incr 原子性 redis的原子性递增操作_redis incr 原子性_05

  3. 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
  1. 第二种关闭方式
    (正常关闭 数据会保存)
    在客户端执行shudown操作
  2. redis incr 原子性 redis的原子性递增操作_redis_06

  3. 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:

redis incr 原子性 redis的原子性递增操作_数据库_07


取值语法

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 filedhmset key field1 value1 field2 value2 ...对应的取值 hmget key field1 filed2

hgetall key 获取所有的字段

删除特定的字段

hdel key field field1 删除一个或者多个field

hlen key 获取hash表中字段的数量

hkeys key 获取hash表中所有的字段

redis incr 原子性 redis的原子性递增操作_数据库_08

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