1.基于内存的key-value数据库
2.基于c语言编写的,可以支持多种语言的api //set每秒11万次,取get 81000次
3.支持数据持久化
4.value可以是string,hash, list, set, sorted set
使用场景
- 去最新n个数据的操作
- 排行榜,取top n个数据 //最佳人气前10条
- 精确的设置过期时间
- 计数器
- 实时系统, 反垃圾系统
- pub, sub发布订阅构建实时消息系统
- 构建消息队列
- 缓存
首先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文件压缩处理(命令)