一、redis服务安装
windows 启动临时服务 ,切换到安装目录
redis-server.exe redis.windows.conf
1.redis 启动,在哪个文件夹下启动 dump.rdb就会保存到哪个文件下 建议每次启动都从一个文件夹
ctrl+c退出
2.精灵进程(守护进程)是为其他进程提供服务的,都是通知操作系统启动的进程
启动精灵进程
/user/local/redis-server redis.conf
redis.conf
requirepass 设置密码
auth "密码"
3.默认端口6379
linux安装
在安装redis之前先安装gcc,不然后续make的时候会报错。yum -y install gcc-c++
tar xzf redis-5.0.0.tar.gz
cd redis-5.0.0
make
后台服务
在redis-5.0.0目录下新建etc和bin文件夹
[root@VM_0_4_centos src]# cp ../redis.conf /usr/local/redis-5.0.0/etc
[root@VM_0_4_centos src]# cp redis-cli redis-server mkreleasehdr.sh redis-check-aof redis-check-rdb
redis-benchmark /usr/local/redis-5.0.0/bin
修改/usr/local/redis-5.0.0/etc/redis.conf配置文件,命令 vim redis.conf,将后台启动打开,即将daemonize选项由no置为yes
/usr/local/redis-5.0.0/bin目录,执行./redis-server ../etc/redis.conf脚本文件:
./redis-cli
redis-cli shutdown
二、redis数据结构
1、字符串类型
value 数据是一个字符串,底层保存的都是二进制数据,可以是 图片,音频,视频,最大 512M
新增
set key value
如果键存在会覆盖原来的值
set key value nx|xx
nx 不存在key时才执行
xx 存在key时才执行
成功返回 ok 失败返回nil
setex key seconds value
get key
mset key value key value 设置多个字符串值
mget key1 key2 key3
getset key value 设置新值返回旧值,更新
append key value 字符串追加,返回字符串的长度
常用习惯
mset user::name "张三" user::age 20 用::代表级别
redis中不能存在相同的key
mset user::id:name user::id:age
getset a 4
append a "1212" 在key为a的值后追加
incr key 递增
decr key 递减
递增和递减必须是数字
2、hash 散列类型(常用类型) 类似于map 适合存储对象,比string类型占用更少的空间
hset myname field1 value
hget myname field1
myname 相当于集合名字, field1 字段名 value字段值
也可以同时设置多个值
hmset myname sex nan addr beijing
hmget
hkeys 返回hash里所有的字段
hvals 返回hash的所有value
hgetall 返回hash里所有的key和value
3、List 类似 queue 双向链表 ,可以做栈,也可以作为队列,可重复,可作为消息队列
lpush key value
从头部加入元素,先进后出(栈)
rpush key value
从尾部加入元素,先进先出(队列)
lrange key 0 -1 获取list中的元素插入元素
linsert list1 before 集合的元素 插入的元素
lpop list1 从list的头部删除元素,并返回删除元素
rpop list1 从list的尾部删除元素,并返回删除元素
lindex list1 1 返回索引为1的元素
llen list 返回list的长度
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
实例
redis 127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH runoobkey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE runoobkey 0 10
1) "mysql"
2) "mongodb"
3) "redis"
4、set和zset 类似 list 可用于取交集,并集,差集
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
set 无序不可重复
sadd key value value1 value2
srem 删除
zset 有序,索引从1开始,可应用于搜索排行,例如每隔多长时间排一次序
zadd key 序号 value
zrange key 0 -1
zrank 返回排序索引,从小到大
zrevrank 返回排序索引,从大到小
排行 rank
Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
实例
redis 127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
5、常用命令
keys * 模糊匹配 查看key
expire key 5 设置键的过期时间 5秒
ttl key 查看key 的剩余过期时
persist key 在key 没过期时 取消key 的过期时间
select 选择数据库 0到15 ,将数据库分成16份为了数据安全,shell分片备份,不同类型数据放到不同数据库,库是逻辑划分不是物理划分
move key 2 将key 移动到第二个数据库中
rename 重命名key
dbsize 查看当前数据库中有多少keys
info 查看redis相关信息
auth 密码 如果设置了密码 在redis.config 中requerepass
6、持久化机制
1、rdb snapshotting 快照 默认方式默认 dump.rdb
save 900 1 900秒内如果超过1个key被修改,则发起快照保存
默认
save 900 1
save 300 10
save 60 10000
2、aof append-only file 可以指定一个时间间隔 类似日志的行追加内容到
appendonly.aof 中
appendonly yes 启动aof持久化
三种方式
appendsync always 收到写命令就立即写入到磁盘,效率最慢,但是保证完全的持久化,常用
appendsync everysec 每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
appendsync no 完全依赖os,性能最好,持久化没保证
7、发布、订阅消息 可应用于公告
subscribe aaa 订阅频道
publish aa 内容 发布内容
jedis 2.7以上版本才支持集群
redis 可组合使用 比如 hash 和set 共用使用
Map <String,String> map = new HashMap();
User u = new User();
map.put(id1,u1);
map.put(id2,u2);
hset USER_TABLE map;
把要查询的条件放到set中 比较年龄等于20的user
sadd user_age_20 id1
三、主从 Master 可以拥有多个slave 读写分离,主做写,从做读
修改两处配置文件
四、redis 简单事务,目前redis 对事务支持不是太好
multi 开始事务
----
----
----相关操作
exec 执行提交
discard 取消事务回滚
jedis 客户端
是redis 应用提供的java 访问客户端 第三方jar 操作redis
redis 持久化
RDB
在服务器端创建RDB的三种条件
1.服务器执行客户端发送的SAVE命令 会阻塞 一般空闲时可以
2.BGSAVE 不会阻塞
save 300 10 距离上次保存300秒后 超过10修改 就自动BGSAVE
save 1000 100
多个时 只有任意一个满足就执行
3.自动 在配置文件中定时 BGSAVE
AOF
append only file
自动重写条件
auto-aof-rewrite-percentage 100 (100%当达到一倍时重写,要不永远卡到64mb)
auto-aof-rewrite-min-size 64mb 最小64mb时重写
三种策略
Always :服务器每写入一个命令 ,就把缓冲区里的数据同步到硬盘上,不丢失数据,浪费CPU
Everysec: 每秒调用一次,最多丢1秒
No: 不去调用同步
默认Everysec