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

posted @ 2021-04-08 11:26  gidos  阅读(46)  评论(0编辑  收藏  举报