Redis_1
Redis_1
标签(空格分隔): redis
nosql
key-value 字典
nosql 产品
not only sql :第二代数据库架构
非关系型、非结构化、半结构
缓存数据库: redis, memcached , tair ....
文档类: MongoDB,ES
列存储: HBASE
图像存储: Neo4J
newSQL 第三代数据库架构转型
去 IOC IBM Oracle EMC
集成多种数据库软件为一体
缓存产品
memcached
redis
Tair
reids功能介绍
数据类型丰富
支持持久化
多种内存分配以及回收策略
支持事务
消息队列、消息订阅
支持高可用
支持分布式分片集群
缓存传统、雪崩
redis api
memcached:
高性能读写、单一数据类型、支持客户端时分布式集群、一致性hash
多核结构、多线程读写性能高
无持久化、节点故障可能会出现缓存穿透、分布式需要客户端实现、跨机房数据同步困难、架构扩容复杂度高
redis
高性能读写、多数据类型支持、数据持久化华、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能高
多线程读写比memcached慢
memcached 适合多用户访问、每个用户少量rw
redis 适合少用户访问、每个用户大量rw
io多路复用
安装部署
http://download.redis.io/releases/
tar -xf redis
yum -y install gcc automake autoconf libtool make
cd redis
make && makeinstall
vim /etc/profile
export PATH=/data/redis/src:$PATH
source /etc/profile
启动
redis-server &
配置
vim /etc/redis.conf
daemonize yes #后台运行
port 6379 # 端口
logfile /data/redis/redis.log #日志
dir /data/redis/ #持久化数据
dbfilename dump.rdb #rdb持久化数据文件
requirepass 123456 #密码
bind 10.0.0.51 127.0.0.1
配置获取
CONFIG GET 参数名
配置设置
CONFIG SET maxmemory 20G
reids 持久化
RDB 持久化
可以在指定的时间间隔内生成数据集的 时间点快照
优点:速度快,适合于用作备份,主从复制也是基于RDB持久化功能实现的
缺点:会有数据丢失
AOF 持久化
有点像mysql的binlog
记录服务器执行的所有写操作,并在服务器启动时,通过重新执行这些命令还原数据集
AOF文件中的命令全部以redis协议的格式来保存,新命令被追加到文件的末尾。
优点: 可以最大程度保证数据不丢
缺点:日志记录量比较大
RDB 配置
dir /data/redis/ #持久化数据
dbfilename dump.rdb #rdb持久化数据文件
save 900 1 #900秒由一个更改
save 300 10 #300秒 10个更改
save 60 10000 #60秒 10000更改
AOF 配置
appendonly yes #aof日志功能
appendfsync always #每一个命令 立即同步到aof
appendfsync everysec #每秒写一次
appendfsync no #写入工作交给操作系统,由操作系统判断缓冲区,统一写道aof
5大类型
String(字符串)
Hash(哈希)
List(列表)
Set(集合)
Zset(有序集合)
显示中文
redis-cli --raw
基本操作 set get
set name hu yan
set age 22
get name
get age
keys *
set sex "male" ex 3
set sex "male" px 5000
set sex "male" nx sex 不存在时 set操作才执行
set sex "male" xx sex 存在时 set操作才执行
mget 批量获取
批量设置
mset iphone 5800 xiaomi 2499 oppo 3300
mget("xiaomi","iphone")
切片
getrange name 0 1
setrange name 0 uuuu
二进制操作
setbit name 1 0
原
01100001 a
后
00100001 !
统计用户数
set usercount 0
setbit usercount 1 0
setbit usercount 2 0
setbit usercount 3 0
bitcount usercount
setbit usercount 1 0
id 为4999
setbit usercount 4999 1
得到 223 是否登陆了
getbit usercount 223
字节 汉字占3个
strlen()
自增
incr(self,name)
自减
decr(self,name)
应用场景
直播
耍火箭 +1000
incr xxx 1000
incr xxx 1000
hash
hash 字典 info {name:hu,}
hset info name hu
hset info age 22
hmset pp s ss a
hget info name
hmget info age
hgetall info
长度
hlen(info)
字段
HKEYS INFO
值
HVALS INFO
是否存在
HEXISTS INFO NAME
HINCRBY info age 1 加一
查询开头为a的
HSCAN INFO 0 MATCH A*
包含a的
HSCAN info 0 match a
迭代器
HSCAN_ITER()
list操作
可以用于聊天消息的推送
lpush xx "hi"
lpush xx "你好"
左存
lpush st_list k1,k2,k3,k4,k5
查看
lrange st_list 0 -1
右存
rpush st_list bighead
有列表 才会添加值
rpushx st_list rz
lpushx st_list ssz
插入
linsert st_list before 2 k8
修改
lset st_list 2 values5
删除
lrem st_list 2 values5
移除
lpop
lpop st_list
lindex 索引 取值
lindex st_list 2
ltrim 切片
ltrim st_List 1 5 从1切到5
rpoplpush 从右弹出 放进左边
rpoplpush st_list st_list2
blpop 将多个列表排列 从左到右pop元素
BLPOP st_list st_list2 1
brpoplpush 有个等待超时
set集合
添加
sadd s_set 1 2 3
查看
SMEMBERS s_set
获取数量
SCARD s_set
sadd s_set2 2 4 5 7 8 9
差集
sdiff s_set s_set2
把差集存入s_set3
sdiffstore s_set3 s_set s_set2
交集
sinter s_set s_set2
交集存在一个地方
sinterstore
sismember s_set asdasd
从一个移到另一个
smove
随机获取几个元素
srandmember
删除
srem
并集
sunion
找
sscan s_set 0 match a
有序集合
zadd z_set 1 hh
zadd z_set 2 hhh
查看 和权重展示
zrange z_set 0 -1 withscores
Z=
ZRANGEBYSOCRE z_set 1 10 得到1 到 10 权重排名
倒序
zrevrange z_set 0 -1 withscores
排名
zrank z_set hh
更具排行删除
zremrangebyrank
根据分数范围删除
zremrangebyscore
获取某个人的对应分数
ZSCORE z_set hh
交集存在z_set3 分数 SUM 相加 MIN 小的 MAX大的
zinterstore z_set3 2 z_set z_set2 aggregate SUM
并集
zunionstore
模糊查询
zscan
常用操作
del set_s #可以删除多个
exists key #是否存在
keys #所有表
get #取得表
expire oppo 3 #为表创建超时时间
rename #重命名
move #移动
切换db
redis 总共16个db
select 1
移动name到db1 如果有 就无法移动
move name 1
随机获取key
randomkey()
返回类型
type z_set
扫描 全局
scan
一些操作
info
Client list
Client kill ip:port
config get *
config resetstat
config get/set/rewrite
dbsize
flushall #清空所有
select 1
flushdb #清空当前库
monitor #监控实时指令
shutdown #关闭服务器
redis 消息模式
消息模式是为了帮助解决在架构中,资源有效利用方面提供有效的协调
redis的消息模式有多种形式,消息队列,发布订阅
kafka rabbitMQ activeMQ 专门做列队的软件
发布
PUBLISH fm103 hi
订阅
SUBSCRIBE fm103
redis 事务
redis和mysql 事务的差别
redis的事务基于队列实现的,redis是乐观锁机制,仅仅原子性的保证,属于弱事务支持。
mysql的事务基于redo、undo、悲观锁机制、mvcc、isolastion等机制一起保证,属于强事务。
开启
multi
set x 20
set y 30
执行
exec