赞
踩
NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。
特征:
Nosql 作用:应对基于海量用户和海量数据前提下的数据处理问题。 常见 Nosql 数据库:
概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
字符串类型 string 列表类型 list 散列类型 hash 集合类型 set 有序集合类型 sorted_set
docker安装
# 拉取镜像 docker pull redis # 数据卷准备 mkdir -p /mydata/redis/conf touch /mydata/redis/conf/redis.conf echo "appendonly yes" >> /mydata/redis/conf/redis.conf # 启动 docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \ -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-server /etc/redis/redis.conf # 进入容器内部客户端 docker exec -it redis redis-cli # 自启 docker update redis --restart=always
# 添加, 再此设置同一个key就会覆盖 set key value # 得到 get key # 清屏 clear # 帮助信息 help 命令名 help get help @组名 help @String # 退出 quit exit <ESC>
基本操作
# 1.单指定操作 # 添加/修改操作 set key value # 获取数据 get key # 删除数据 del key # 2.多指令操作 # 添加修改多个数据 mset key1 value1 key2 value2 … # 获取多个数据 mget key1 key2 … # 获取数据字符个数(字符串长度) strlen key、 # 追加信息到原始信息后部(如果原始信息存在就追加,否则新建) append key value
扩展操作
1.设置数值数据增加指定范围的值 # 整数自增,默认为1 incr key # 指定增加值,必须为整数 incrby key increment # 指定增加小数 incrbyfloat key increment 2.设置数值数据减少指定范围的值 decr key decrby key increment 3. 设置数据具有指定的生命周期 # 秒 setex key seconds value # 毫秒 psetex key milliseconds value
注意事项
# 添加/修改数据 hset key field value # 获取数据 hget key field # 获取一个key的所有值 hgetall key # 删除数据 hdel key field1 [field2] # 添加/修改多个数据 hmset key field1 value1 field2 value2 … # 获取多个数据 hmget key field1 field2 … # 获取哈希表中字段的数量 hlen key # 获取哈希表中是否存在指定的字段 hexists key field
# 获取哈希表中所有的字段名或字段值
hkeys key
hvals key
#值可能重复
# 设置指定字段的数值数据增加指定范围的值 正数负数都行
hincrby key field increment
hincrbyfloat key field increment
she
# 存在字段就失败,不存在就添加
hsetnx key field value
# 添加/修改数据 # 左添加 lpush key value1 [value2] …… # 右添加 rpush key value1 [value2] …… # 获取数据 # start stop 是索引,最后一个索引可以是 -1 lrange key start stop lindex key index # 获取长度 llen key # 获取并移除数据 lpop key rpop key
阻塞式获取
# 规定时间内获取并移除数据
blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout
业务场景
从中间拿数据?
# 移除指定数据
# count:移除几个 value:移除哪个值
# 比如有多个同样的value,从左删除几个
lrem key count value
Tips 6: redis 应用于具有操作先后顺序的数据控制
# 添加数据
sadd key member1 [member2]
# 获取全部数据
smembers key
# 删除数据
srem key member1 [member2]
# 获取集合数据总量
scard key
# 判断集合中是否包含指定数据
sismember key member
解决方案
# 随机获取集合中指定数量的数据
srandmember key [count]
# 随机获取集合中的某个数据并将该数据移出集合
spop key [count]
解决方案
求两个集合的交、并、差集
# 交集 A∩B
sinter key1 [key2]
# 并集 A∪B
sunion key1 [key2]
# 差集 A-B A里面有B里面没有
sdiff key1 [key2]
求两个集合的交、并、差集并存储到指定集合中
# destination是一个存储的目的集合的
keysinterstore destination key1 [key2]
sunionstore destination key1 [key2]
sdiffstore destination key1 [key2]
将指定数据从原始集合中移动到目标集合中
smove source destination member
score不用来存储数据
# 添加数据
zadd key score1 member1 [score2 member2]
# 获取全部数据,可以选择是否带
scorezrange key start stop [WITHSCORES] # 升序
zrevrange key start stop [WITHSCORES] #降序操作
# 删除数据
zrem key member [member ...]
# 按条件获取数据 limit限制数量
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrevrangebyscore key max min [WITHSCORES]
# 条件删除数据
zremrangebyrank key start stopzremrangebyscore key min max
# 获取集合数据总量
# 获得总数
zcard key
# 根据score的范围查
zcount key min max
# 集合交、并操作
# 交集的score求和
zinterstore destination numkeys key [key ...]
# 并集的score求和
zunionstore destination numkeys key [key ...]
# 获取数据对应的索引(排名)
zrank key member
zrevrank key member #降序
# score值获取与修改
zscore key member
zincrby key increment member
#修改score
这样无法保证原子性操作,得到的与删除的不是同一个
简单说就是保证score的长度相同
利用数据值上限的规则来判断,一分钟后,再重新设置
# 删除指定key
del key
# 获取key是否存在
exists key
# 获取key的类型
type key
# 为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
# 获取key的有效时间
ttl key # 返回三个值:剩余时间,(-2)不存在,(-1)未设置有效期
pttl key
# 切换key从时效性转换为永久性
persist key
keys pattern
# 为key改名
rename key newkey # 改成一个存在的名字会覆盖掉哪个存在的
renamenx key newkey # 不会覆盖
# 对所有key排序,只是排顺序,没有对元数据操作
sort
# 其他key通用操作
help @generic
db基本操作
# 切换数据库
select index
# 其他操作
# 退出
quit
# cli和服务器是否连通
ping
# 输出日志
echo message
# 有多少个key
dbsize
# 数据移动
move key db
# 数据清除(危险)
# 删除本地的信息
flushdb
# 删除所有数据库的信息
flushall
helloworld
public void testJedis(){ // 1.连接redis Jedis jedis = new Jedis("192.168.10.188", 6379); // 2.操作redis jedis.set("name","ls"); String name = jedis.get("name"); System.out.println(name); // 3.关闭redis jedis.close(); }
其他操作与shell命令一样
redis数据是在内存中的,可能会断电数据丢失,就需要将数据存到硬盘上
保存的方式:
RDB(快照):定时将数据持久化到硬盘中
AOP(日志):保存操作的过程
命令
save
作用:手动执行一次保存操作
保存在一个.rdb的文件中
save指令相关配置(添加到配置文件中)
dbfilename dump.rdb
说明:设置本地数据库文件名,默认值为 dump.rdb
经验:通常设置为dump-端口号.rdb
dir
说明:设置存储.rdb文件的路径
经验:通常设置成存储空间较大的目录中,目录名称data
rdbcompression yes
说明:设置存储至本地数据库时是否压缩数据,默认为 yes,采用 LZF 压缩
经验:通常默认为开启状态,如果设置为no,可以节省 CPU 运行时间,但会使存储的文件变大(巨大)
rdbchecksum yes
说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程均进行
经验:通常默认为开启状态,如果设置为no,可以节约读写性过程约10%时间消耗,但是存储一定的数据损坏风险
# 指定端口号port 6379# 指定文件名dbfilename dump-6379.rdb# 指定文件路径dir /data# 压缩rdbcompression yes# 检查rdbchecksum yes
save指令工作原理
如何解决 ?
后台执行
命令
# 后台执行保存操作bgsave
作用
手动启动后台保存操作,但不是立即执行
bgsave执行原理
在配置文件配置就会自动进行保存
save second changes
原理
save配置就是bgsave
配置
appendonly yes|no
作用
是否开启AOF持久化功能,默认为不开启状态
配置
appendfsync always|everysec|no
作用
AOF写数据策略
配置
appendfilename xx.aof
作用
指定生成的文件名
只有最后一个命令才会形成最终的数据,造成冗余
# 手动重写bgrewriteaof# 自动重写auto-aof-rewrite-min-size sizeauto-aof-rewrite-percentage percentage
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。