NoSQL
Not Only SQL
特性:
易扩展
大数据量,高性能
灵活的数据模型
高可用
Redis
key-value 数据库
5种类型:
1字符串类型
2散列类型
3列表类型
4集合类型
5有序集合类型
就是String list set sortset map
官方数据:50个并发 执行10W 读 的速度11W次/s 写 8.1W次/s
应用:
缓存 (数据查询 短链接 新闻内容 商品内容) *****
聊天室的在线好友列表
任务队列(秒杀 抢购 12306)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫秒)
分布式集群架构中session分离
配合json
安装:下载地址:https://github.com/MSOpenTech/redis/releases。
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf 。
这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。
切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379 。
这种实在本地运行,
远程连接要将: conf 文件中:
bind 127.0.0.1
改成 远程地址
设置键值对 set myKey abc
取出键值对 get myKey
会有自动提示
java 使用 redis
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.0</version>
</dependency>
jedis-2.7.0.jar
commons-pool2-2.3.jar
package com.stevezong.redis.demo;
import redis.clients.jedis.Jedis;
public class T {
@Test
//获得单一的jedis对象操作数据库
public void t9() {
//1、获得连接对象
Jedis jedis = new Jedis("172.29.12.158",6379);
String username = jedis.get("username");
System.out.println(username);
jedis.set("addr","上海");
System.out.println(jedis.get("addr"));
jedis.close();
}
@Test
//通过jedis的pool获得jedis连接对象
public void t10() {
//创建pool的配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大闲置个数
poolConfig.setMaxIdle(30);
//最小闲置个数
poolConfig.setMinIdle(10);
//最大连接数
poolConfig.setMaxTotal(50);
//创建一个pool
JedisPool pool = new JedisPool(poolConfig,"172.29.12.158", 6379);
Jedis jedis = pool.getResource();
System.out.println(jedis.get("addr"));
jedis.close();
pool.close();
}
}
常用的就是 String hash
key的定义:不要太长,不要超过1024个字节 消耗内存 降低查询效率
key不要太短,降低key的可读性
key有统一的命名规范
String 是最基础的 他在redis 中是二进制安全的 也就是 存入和获取的一样, value 最大512M
set
set key value
get
get key
返回 (nil) 表示无
getset
getset key value
先获取该key的值 然后设定该key的值
del
del key
返回(nil) 表示无
删除
incr
incr key
自增1
如果没有这个key 就是0
decr
decr key
自减1
INCRBY
INCRBY key 自增量
decrby
decrby key 自减量
append
append key value
拼接字符串
Hash 类型
可以看成 具有String key 和String value的map容器
非常适合存储值对象的信心
如 Username password age 如果hash 中包含很少的字段 那么该类行的数据也将仅仅占用很少的磁盘空间 每一个hash可以存储 4293967295个键值对
hset
hset key field value
hget
hget key field
hmset
批量 赋值
hmset key field1 value field2 value
hgetall
查hash 中的所有
hgetall key
hdel
删除hash 的一条数据
hdel key field
hdel key field field1
del
删除整个hash
del key
hincrby
自增
hincrbu key field 自增量
hexists
判断指定的key中的filed 是否存在 存在1 不存在0
hexists key field
hlen
hash的长度
hlen key
hkeys
所有的key
hkeys key
hvals
所有的value
hvals key
list 类型
是按照出入顺序排序的字符串链表 可以在头 left 和 尾部 right 添加新的元素 如果该key 不存在 将创建一个新的链表 如果链表中所有的元素都被移除 这个key 也会被删除
list 最大的元素数量是4292967295
lpush
存
lpush key value value value .....
rpush
存
rpush key value value value ...
lrange
取 0 是开始 -1最后 -2到第二
lrange key start stop
lpop
取
lpop key
rpop
取
rpop key
llen
长度
llen key
lpushx
存 当key 存在的时候 可以插入 不存在不能插入
lpushx key value
lrem
删除 count 为0时 从头到尾 删除 value count大于0 为3时 从头到尾 删除 3个value value要背删除的数据
lrem key count value
lset
存 在index位置插入一个value
lset key index value
linsert
存 在 pivot 的前面或者后面 插入一个value
linsert key BEFORE|AFTER pivot value
rpoplpush
取加存 从某个key list 的尾部取一个 放入 某个key2 list的头
rpoplpush key key2
set 类型
set 中不能重复元素
sortedset 类型
key的通用操作
keys
查所有的key
* 任意一个多个
?任意一个
del
删除
del key1 key2 key3
exists
是否存在 有1 没有0
exists key
rename
重命名
rename oldKey newKey
expire
过期时间 秒
empire key time
ttl
获取剩余过期时间 没有设置超时-1 已经超时-2
ttl key
type
类型
type key
Redis 特性
多数据库
客户端默认使用0号
1个redis 最大可有16个
0-15
使用select
select 1
select 2
移动key 到 0-15的库中
move key 0-15
ping
检测连接是否存活
quit
退出
echo
打印后面的内容
dbsize
返回当前数据库中的key的数目
info
获取服务器的信息和统计
flushall
删除所有库的所有key
SAVE
该命令将在 redis 安装目录中创建dump.rdb文件。
Bgsave
创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。
订阅与发布
subscribe channel 订阅频道 subscribe mychar 订阅mychar这个频道
publish channel content 发布频道 publish mychar xxx 发布mychar频道内容为xxx
psubscribe channel*:批量订阅 psubscribe dd* 订阅dd开头的频道
redis 事物
multi 开启事物用于标记书屋的开始
exec 提交事物
discard 事物回滚
redis 持久化
两种 RDB AOF
RDB 默认支持 无需配置
指定的时间间隔将内存中的数据集快照写入磁盘
简单: 数据多 适合使用 但是可能会丢数据.
AOF
以日志的形式记录服务器所处理的每一个写操作 在redis 服务器启动之初会读取该文件来重新构建数据库 以保证启动后数据库中的数据是完整的
默认没有开启
无持久化
通过配置的方式禁用redis 服务器的持久化功能 redis 加强版的memcached
可以同时使用RDB和AOF
redis 配置文件
save 900 1 900秒内修改1个key 拍快照
save 300 10 300秒内修改10个 拍快照
save 60 10000 60秒内修改1W个 拍快照
但是尽管这样设置,Redis也不是严格 15 分钟保存一次的,可能 7 - 8 分钟就会触发保存
dbfilename dump.rdb 配置rdb文件的名字
dir ./ 配置 rdb 文件的目录
开启AOF
appendonly no 改为 yes
appendfilename "appendonly.aof" 文件名
存的时机:
# appendfsync always 总是 每次有数据修改发生都会写入aof文件
appendfsync everysec 每秒
# appendfsync no 从不
数据恢复:
1、flushall 清空数据库
2、shutdown nosave 关闭redis 服务 防止dump.rdb
3、编辑aof文件 将日志中的flushall命令删除并重启服务
redis 客户端
redis desktop manager