文章目录


  1. NoSql{not only sql}
  2. redis:开源,k-v结构,高速缓存,效率高;
    特征:多种数据类型、持久化、集群、事务…
  3. Linux安装redis,redis-benchmark官方自带的压力测试工具
  4. redis默认16个数据库,默认使用第0个(第一个数据库)
常用命令:(不区分大小写)
select 3 :切换数据库
keys * :查看所有的key
get key :获取值
flushdb :清除当前数据库
flushall :清空所有数据库
set key value :添加值
exists key :判断 key是否存在,返回1存在
move key 1(当前数据库) :删除key
expire key 10 :设置key的过期时间
ttl key :查看key的剩余时间
type key :查看key数据类型
  1. redis是单线程:redis是基于内存操作的,CPU不是redis性能的瓶颈,redis的瓶颈是根据机器的内存和网络带宽
    redis是单线程为什么还真么快:redis将所有的数据放在内存中,所以使用单线程操作效率高,(多线程CPU会上下文切换,耗时的操作),对于内存系统,如果没有上下文切换效率就是最高的。
  2. 五大数据类型
    String(自字符串):
    List(列表,双向的):可以做栈、队列、阻塞队列
存值:lpush(从左变插入,其他数据往右移)/rpush(从右变插入,其他数据往左移) list value
取值:lrange list 0 -1(全部值);lrange list 0 1(范围值)
移除第一个元素:lpop/rpop list
通过下标取值:lindex list 1
获取长度:llen list
移除指定个数的value:lrem list 1 value
根据下标截断指定长度:ltrim list 1 2
列表复制:rpoplpush list(源列表) newlist(新列表)
根据下标更新:lset list 0 value
根据下表前/后插入数据:linsert before/after "value" "newvalue"

Set(集合,值无序、不重复)

添加值:sadd myset "value"
查看指定set的所有值:smembers myset
判断值是否存在set中,sismember myset value
获取set中元素个数:scard myset
删除set中指定值:srem myset value
随机抽出一个元素:srandmember myset
随机删除一个元素:spop myset
指定值移到另个set中:smove myset newset "value"
集合的差集、交集、并集:sdiff/sinter/sunion key1 key2

Hash(哈希,map集合k-v结构)适合对象存储

存值:hset myhash key value
取值:hget myhash key
存值多个字段值:hmset myhash key1 value1 key2 value2
获取多个字段值:hmget myhash key1 key2
获取全部值:hgetall myhash  结果键值对形式
删除指定key:hdel myhash key
获取哈希长度:hlen myhash
判断哈希中key是否存在:hexists myhash key
获取所有的key:hkeys  myhash
获取所有的值:hvals myhash

Zset(有序集合)set基础上加一个排序值

添加:zadd myset 1 value
  1. 三大特殊数据类型
Geospatial地理位置
Hyperloglog基数(不重复元素)网页的访问量(一个用户多次访问只算一次)
Bitmap位存储
  1. redis事务:一组命令的集合,具有一致性,顺序性,隔离性,(单条命令是原子性的,但是事务不保证原子性),(redis事务没有隔离级别的概念)
1.开启事务:multi命令
2.事务排列:操作命令顺序
3.执行事务:exec命令
放弃事务:discard

事务中发生错误:
1.编译异常(代码或命令有错):事务中所有命令都不会执行
2.运行异常(1/0):发生错误的命令不执行,其他命令正常执行
  1. springboot整合redis
    依赖,配置类,工具类
  2. redis.conf详解
1.对大小写不敏感
2.include #包含其他配置文件
3.bind 127.0.0.1 #绑定ip:(本地)
4.protected-mode yes #保护模式开启
5.port 6379 #端口设置

通用配置
1.daemonize yes #以守护进程方式运行,默认no
2.pidfile /var/run/redis_6379.pid #如果以后台方式运行,指定一个pid进程文件
3.loglevel notice/debug/warning #日志
4.logfile "" #日志输出文件位置,空为只打印
5.databases 16 #默认数据库数量16
6.always-show-logo yes #是否总是显示logo

快照(持久化,在规定时间内,执行多少次操作,则会持久化)
1.类型
save 900 1 #900s内,如果至少有一个key进行修改,就会执行持久化操作
save 300 10 #同理
save 60 10000 #同理

2.stop-writes-on-bgsave-error yes #持久化出错,是否继续工作
3.rdbcompression yes #是否压缩rdb文件,需要消耗cpu资源
4.rdbchecksum yes #保存rdb文件时进行错误的检查校验
5.dir ./ #rdb文件保存目录

主从复制

安全
1.requirepass 123 #默认无密码

限制
1.maxclients 10000 #设置能连接上redis最大客户端的数量
2.maxmemory <bytes> #redis配置最大的内存容量
3.maxmemory-policy noeviction #内存达到上限后处理策略
	volatile-lru:只对设置过期时间的key进行lru(默认)
	allkeys-lru:删除lru算法的key
	volatile-random:随机删除即将过期的key
	volatile-ttl:删除即将过期的key
	allkeys-random:随机删除
	noeviction:永不过期,返回错误
	
appendonly no #默认不开启aof模式,使用rdb持久化(完全够用)
appendfilename "" #持久化文件名称

appendfsync everysec每次修改都会同步,消耗资源 、always 每秒执行一次同步,可能会丢失数据、no不同步
  1. 持久化
  1. rdb
触发机制:
1、满足save的规则
2、执行flushall命令
3、推出redis
就会自动生成dump.rdb文件

恢复:
将rdb文件放在redis启动目录下,redis会自动检查dump.rdb恢复数据
  1. aof(append only file)
默认不开启,需手动开启(修改配置appendonly yes,重启即可)
aof保存的文件appendonly.aof

如果aof文件有错位,这时候redis是启动不起来的,需要修复该文件(redis-check-aof --fix appendonly.aof)
  1. rdb、aof区别
RDB持久化(将内存中的数据定时快照到磁盘上的dump.rdb文件)
AOF持久化(将Reids的操作日志以追加的方式写入appendonly.aof文件)