Redis笔记

来源:互联网 发布:java中逻辑或 编辑:程序博客网 时间:2024/05/20 10:15
1.单机Mysql
2.Memcached(缓存)+Mysql+垂直拆分
3.Mysql主从读写分离
4.分表分库+水平拆分+Mydql集群
在Memcached的高速缓存,Mysql的主从复制,读写分离的基础上,这时Mysql主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MYISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发Mysql应用开始使用InnoDB引擎代替MyISAM。


高并发的操作是不太建议有关联查询


NOsql数据模型
聚合模型
KV
Bson
列族



聚合模型


新浪:BerkeleyDB + redis
美团:redis + tair
阿里、百度:memcache + redis


文档型数据库:典型介绍MongoDB
基于分布式文件存储的数据库。
MongoDB 






NoSQL数据库的四大分类:
1.KV redis
2.文档型数据库 mongoDB
3.列存储HBase
4.图形Neo4j,


在分布式数据库中CAP原理CAP + BASE
C:Consistency
A: Availablity
P: Partition tolerance
CAP的3进2
经典的CAP图
BASE
分布式 + 集群简介


CAP:
1.Redis(MongoDB)的理念是CP,C强一致性、P分区容错性
2.传统的数据库 CA,C强一致性、A高可用性
3.AP大多数网站架构的选择 + 弱一致性


BASE为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。
BASE:
基本可用Basically Available
软状态Soft state
最终一致 Eventually consistent


分布式
不同的多台服务器上面部署不同的服务模块


集群
不同的多台服务器上面部署相同的服务模块


负载均衡


Redis  REmote DIctionary Server
(远程字典服务器)
高性能的key/value分布式内存数据库
1.持久化
2.数据类型丰富
3.数据的备份


能干什么?
1.内存存储和持久化
2.取N个数据的操作
3.发布、订阅消息系统
4.定时器和计数器


Http://redis.io/
Http://www.redis.cn/


tar -zxvf 解压缩
tar -zcvf 压缩


1.在redis 使用make命令(yum install gcc-c++)
2.make distclean 再make
3.make install


启动命令:
redis-server /myredis/redis.conf
redis-cli -p 6379
ping 
set k1 hello 
shutdown (关闭)


redis-benchmark来看看redis的性能。


单进程


看有多少个库:
redis.conf


选择库:
select 7(换到第8个库)


Dbsize
查看当前数据库的key的数量


keys *
所有key罗列


keys k?
可以查出所有以k开头的key


FLUSHDB 清空当前库


FLUSHALL 清空所有库


=====================================
二进制安全?
意思是String可以包含任何数据,比如jpg图片或者序列化的对象


五大数据类型:
String:最基本的类型,和Memcached一模一样的类型。
Hash:类似Java里面的Map Map<String,Object>
List:列表,
Set:集合,
Zset(有序集合):不同的元素都会关联一个double类型的分数


redis命令参考 http://redisdoc.com/


=====================================key
keys *
查看所有的key


set k1 v1
EXISIS K1


public class Demo01 {
public static void main(String[] args){
Jedis jedis = new Jedis("127.0.0.1",6379);
System.out.println("connection is ok ===>" + jedis.ping());
}
}


将k3移动到库2
move k3 2


为指定的key设置过期时间
expire key
ttl k1 看一下k1的还能活多久
EXISIS k3 10
-1表示永不过期,-2表示已过期
已过期的将被移除


type k1 
查看数据类型


=====================================String:单key单value
append k1 12345
strlen k1


INCR k2 自增操作(+1)
DECR k2 自减操作(-1)


INCRBY k2 2(每次增加2)
DECRBY K2 2(每次减少2)


set k1 abcd1234
GETRANGE K1 0 -1 
"abcd1234"
GETRANGE K1 0 2
"abc"


SETRANGE K1 0 xxx
"xxxd1234"


setex k4 10 v4
ttl k4


setnx k1 v11
如果不存在,起作用


mset/mget/msetnx
mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3


=====================================List:单key多value
LPUSH list01 1 2 3 4 5
LRANGE list01 0 -1 (全取)
RPUSH list02 12345
LRANGE list01 1 2 3 4 5 
LRANGE list01 0 -1 (全取)


lpop list01
rpop list01


LIDNEX list01 4


llen list01 


RPUSH list03 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 


LREM list03 2 3 (删除2个3)


LPUSH list01 1 2 3 4 5 6 7 8
LTRIM list01 3 5(开始index结束index,截取指定范围的值后再赋值给key)


rpoplpush list01 list02  (list01 出栈到 list02)


lset key index value 
LINSERT key before/after value1 value2


list字符串链表,left和right都可以插入添加


=====================================Set:单key多value
sadd set01 1 1 2 2 3 3
SMEMBERS set01


scard 获取集合里面的元素个数


srem key value 删除集合中的元素


srandmember key 数字(随机出几个数)


spop key 随机出栈


=====================================HasH:KV模式不变,但V是一个键值对
hset user id 11
hget user id 


hset user name z3


hdel user name


HEXISTS user name


HKEYS customer (列出customer所有的key)


hvals customer (列出customer所有的value)


HINCRBY customer age 2 (age的值加2)


=====================================ZSet:在set的基础上,加一个score的值,之前的set是 k1 v1 v2 v3,现在zset是 k1 score1 v1 score2 v2 score3 v3


=====================================解析配置文件 redis.conf
设置vim的行号
:set num 


四个日志级别:
debug
verbose
notice
warning


redis启动命令:
1.redis-server /myredis/redis.conf
2.redis-cli -p 6389
ping 


config get requirepass
config get dir
在哪个路径下启动的,日志就在哪个路径下。


config set requirepass "123456"
auth 123456


LIMITS限制:
Maxclients
Maxmemory
Maxmemory-policy
1>Volatile-lru
2>Allkeys-lru
3>Volatile-random
4>Allkeys-random
5>Volatile-ttl 移除那些TTL最小的key,即那些最近要过期的key
6>noeviction 永不过期
Maxmemory-samples


=====================================持久化=>rdb、aof
技术敏感性


Redis会单独创建一个子进程进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。主进程不进行任何IO操作。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那么RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。


Fork的作用是复制一个与当前进程一样的进程。


redis-server /myredis/redis.conf
redis-cli -p 6379


禁用 save ""


set 1122 1122
save


适合大规模的数据恢复
对数据完整性和一致性要求不高


=====================================aof
insert into test_table values()


set k1 100


incr k1
incr k1
incr k1
incr k1
incr k1
incr k1


redis-server /myredis/redis_aof.conf
redis-cli -p 6379


set k1 v1 
set k2 v2
set k3 v3


修复aof文件:
redis-check-aof --fix appendonly.aof


打开aof
appendonly yes


appendfilename


appendfsync
Everysec


rewrite命令:
bgrewriteaof

原创粉丝点击