1.基于内存的key-value数据库
2.基于c语言编写的,可以支持多种语言的api //set每秒11万次,取get 81000次
3.支持数据持久化
4.value可以是string,hash, list, set, sorted set

使用场景

  1. 去最新n个数据的操作
  2. 排行榜,取top n个数据 //最佳人气前10条
  3. 精确的设置过期时间
  4. 计数器
  5. 实时系统, 反垃圾系统
  6. pub, sub发布订阅构建实时消息系统
  7. 构建消息队列
  8. 缓存

首先redis建立连接
cmd访问redis

cd +redis文件夹的路径
创建端口号为6379的服务
Redis-server --service-install redis.windows.conf --service-name redis6379
然后在计算机服务中点击运行redis6379,
redis-cli.exe -h 127.0.0.1 -p 6379

net start redis6379 启动服务

key

keys * 获取所有的key
select 0 选择第一个库
move myString 1 将当前的数据库key移动到某个数据库,目标库有,则不能移动
flush db      清除指定库
randomkey     随机key
type key      类型
scan 0  当服务器向用户返回值为 0 的游标时, 表示迭代已结束(遍历结束)。  
set key1 value1 设置key
get key1    获取key
mset key1 value1 key2 value2 key3 value3
mget key1 key2 key3
del key1   删除key
exists key      判断是否存在key
expire key 100   10秒后过期
pexpire key 1000    1000毫秒后过期
persist key     删除过期时间
ttl key    查看剩余过期时间

string

set name cxx
    get name
    getrange name 0 -1        字符串分段
    getset name new_cxx       设置值,返回旧值(就是修改)
    mset mset key1 value1 key2 value2            批量设置
    mget key1 key2            批量获取
    setnx key value           将key的值设置成value(只能当key不存在时有效)
    setex key 100 value      覆盖 key 旧值并设置过期时间100秒,如果不存在就创建一个
    setrange key index value  从下标为index开始替换value(value多长就替换几个,如果value长度是5,就替换5个字符,没替换的不改变)
    getrange key 0 4    得到key键下标0-4的字符串
    append key value       在key的值末追加value字符串(key不存在就新建)
    strlen key          得到key的值的长度
    **当vaule是数字时:**
    incr key        key值递增
    incrby age 10   递增10
    decr age        递减
    decrby age 10   递减10
    incrbyfloat     增减浮点数

hash
类似于Map集合,KV模式不变,但V是一个键值对

hset myhash name cxx
hget myhash name
hmset myhash name cxx age 25 note "i am notes"
hmget myhash name age note   
hgetall myhash               获取所有的(遍历myhash)
hexists myhash name          是否存在name键
hsetnx myhash score 100      设置不存在的
hincrby myhash id 1          递增
hincrbyfloat myhash id 1.1         递增浮点数
hdel myhash name             删除
hkeys myhash                 只取key
hvals myhash                 只取value
hlen myhash                  长度

list

lpush mylist a b c  左插入
    rpush mylist x y z  右插入
    lrange mylist 0 -1  遍历mylist集合
    lrange mylist 0 3  遍历mylist中下标0-3的元素
    lpop mylist  弹出mylist集合开头的元素,并且mylist中删除了这个元素
    rpop mylist  弹出mylist集合末尾的元素,并且mylist中删除了这个元素
    llen mylist   mylist集合的长度
    lrem mylist 2 value  根据下标顺序从前往后删除前2个value
    lindex mylist 2          显示下标为2的值
    lset mylist 2 n          索引设值
    ltrim mylist 0 4         删除下标0-4的值
    linsert mylist before a  插入
    linsert mylist after a   插入
    rpoplpush list list2     转移列表的数据

set(不会有重复的元素)

sadd myset redis 	将redis添加到myset中(如果添加的有空格,如redis 2,若集合中存在redis,就会把后面的元素2添加进去;如果2也存在,就添加无效)
smembers myset       遍历数据集合
srem myset set1         删除
sismember myset set1 判断set1元素是否在myset集合中
scard key_name       个数
sdiff k1 k2....差集,在k1集合里面而k2任何一个set里面的项
sdiff | sinter | sunion 操作:集合间运算:差集 | 交集 | 并集
srandmember myset          随机获取集合中的元素
srandmember myset 1        随机获取集合中的1个元素
spop myset                 从集合中弹出一个元素

zset:在set基础上,加一个score分数值。之前set是k1v1v2v3,现在zset是k1 score1 v1 score2 v2
会根据分数从小到大来排序

zadd scores 30 zhangsan 66 lisi 88 wangwu 91 zhaoliu 添加
     zcount scores 0 60 获取分数0-60的个数
     zrank scores zhangsan 获取张三的分数值
     zrange scores 0 -1 withscores  从小到大遍历分数和值
     Zrevrange scores 0 -1 withscores  从大到小遍历分数和值
    zadd zset 1 one
    zadd zset 2 two
    zadd zset 3 three
    zincrby zset 1 one              one的分数加1
    zscore zset two                 获取分数
    zrange zset 0 -1 withscores     范围值
    zrangebyscore zset 10 25 withscores 遍历分数10-25的值
    zrangebyscore zset 10 25 withscores limit 1 2 分页
    Zrevrangebyscore zset 10 25 withscores  指定范围的值
    zcard zset  元素数量
    Zcount zset 获得指定分数范围内的元素个数
    Zrem zset one two        删除一个或多个元素(分数也删除)
    Zremrangebyrank zset 0 1  按照排名范围删除元素
    Zremrangebyscore zset 0 1 按照分数范围删除元素

排序:

sort mylist  排序
    sort mylist alpha desc limit 0 2 字母排序
    sort list by it:* desc           by命令
    sort list by it:* desc get it:*  get参数
    sort list by it:* desc get it:* store sorc:result  sort命令之store参数:表示把sort查询的结果集保存起来

订阅与发布:

订阅频道:subscribe chat1
发布消息:publish chat1 “hell0 ni hao”
查看频道:pubsub channels
查看某个频道的订阅者数量: pubsub numsub chat1
退订指定频道: unsubscrible chat1 , punsubscribe java.*
订阅一组频道: psubscribe java.*

redis事物:

隔离性,原子性,
步骤: 开始事务,执行命令,提交事务
multi 开启事务
discard 取消事务
sadd myset a b c
sadd myset e f g
lpush mylist aa bb cc
lpush mylist dd ff gg
exec 提交

服务器管理
dump.rdb
appendonly.aof
//BgRewriteAof 异步执行一个aop(appendOnly file)文件重写
会创建当前一个AOF文件体积的优化版本

//BgSave 后台异步保存数据到磁盘,会在当前目录下创建文件dump.rdb
//save同步保存数据到磁盘,会阻塞主进程,别的客户端无法连接

//client kill 关闭客户端连接
//client list 列出所有的客户端

//给客户端设置一个名称
  client setname myclient1
  client getname
  
 config get port
 //configRewrite 对redis的配置文件进行改写

redis主从复制
slaveof 127.0.0.1 6379 关联端口为6379的从机
slaveof no one 解除从机身份
redis哨兵模式
当主机发生故障时从从机中自动选出一个替代主机
1.启动主机和从机
2.在安装目录下创建sentinel.conf文件(哨兵配置文件)添加内容格
式:
sentinel monitor myMonitor 127.0.0.1 63791
3.启动哨兵进入哨兵配置文件所在目录:redis-server
sentinel.conf–sentinel

rdb:会生成dump.rdb文件
save 执行存储
在redis.windows.conf文件的配置
save 900 1
save 300 10
save 60 10000

aop备份处理:会生成appendonly.aof文件
bgrewriteaof 对aof文件重写,只保留有用的记录,节省空间
在redis.windows.conf文件appendonly no改成appendonly yes
在redis.windows.conf文件中:
appendfsync everysec 每秒备份一次
appendfsync always 每次修改同步
appendfsync no 不同步

如果rdb和aof文件共存的时候先加载aof文件,由于如果aof文件损坏导致redis无法启动:
cmd进入Redis安装目录:输入redis-check-aof–fix appendonly.aof修复
命令:
bgsave异步保存数据到磁盘(快照保存)
lastsave返回上次成功保存到磁盘的unix的时间戳
shutdown同步保存到服务器并关闭redis服务器
bgrewriteaof文件压缩处理(命令)