Redis

1、NoSql概述

单机时代:
1.数据量太大
2.数据索引,缓存放不下
3.访问量大,服务器承受不了

缓存时代:
3.memcached+mysql+垂直拆分(读写分离)
80%的访问都是读数据

优化数据结构和索引----->文件缓存(IO)---->memcached
4.分库分表+水平拆分+Mysql集群
本质:数据库的读写
Myasam:表锁,效率低
Innodb:行锁
Mysql集群:

最近的年代:(定位信息,图片信息)
数据量大,变化快,mysql关系数据库无法满足;
存较大文件或图片,数据表很大,效率低下

目前的互联网项目:
防火墙----->路由网关(负载均衡)---->


为什么使用Nosql
用户个人信息,社交网络,地理位置,用户生产的数据,用户日志等爆发式增长。这些数据存储不需要固定格式存储,操作不需要横向扩展

关系型数据库:行+列(POI)
什么时Nosql=不仅仅是sql,传统关系型数据库很难对付web2.0时代,尤其是大规模的高并发社区。暴露出很多问题,nosql在大数据时代发展十分迅速。Redis发展最快

Nosql特点
1.方便扩展(数据间没有关系)
2.大数据高性能(redis一秒写8万次,读取11万,是一种细粒度的缓存)
3.数据类型多样性,不需要事先设计数据库,随取随用,如果是数据库量超大,很多人就无法设计
4.与传统的RMDBS的区别
结构化组织
sql
数据关系都存在单独的表中
操作,数据定义语言
严格的一致性
基础的事务

2、String

Redis 是开源的,内存中的数据结构系统,可以用作数据库/缓存/和消息中间件。支持多种数据结构,如字符串(strings)散列(hashes)列表(lists)集合(set)有序集合(sorted sets)与范围查询,bitmaps hyperloglogs 和地理空间半径查询。redis内置了复制/lua脚本/lru驱动事件/事务和不同级别的磁盘持久化,并开通了哨兵和自动分区提供高可用性


Redis-key

key *
exist name
move name
expire name 10
ttl name 查看key的剩余时间
type name 查看当前key的类型

set key value
get key

基本类型
String

set key value
get key
keys *
exists key
append key "xxxx" 如果key不存在 就相当于set
strlen key
incr key 加1
decr key 减1
incrby key 10 (步增)加10
decrby key 10
getrange key 1 2 截取字符串
setrange key 1 "xxxx" 替换字符串
##########################################################
setnx (set if not exits) 分布式锁 如果不存在设置key,如果存在则设置失败
setnx key "xvdsag"
setex (set with expire) 设置过期时间
setex key 30 "xxxxx"
##########################################################
mset k1 v1 k2 v2 k3 v3 设置多个值
mget
msetnx k1 v1 k4 v4 原子性操作,要么全成功要么全失败
#######################
set user:1 {name:zhangsan,age:20} 设置一个user对象值为json
mset user:1:name zhangsan user:1:age 10
###################################
getset 先获取再设置

String 使用场景:字符串和数字
计数器,统计多单位的数量,粉丝数,对象存储

 3、List

List:可以当栈或队列或阻塞队列


基本命令
LPUSH list ONE
RPUSH list ONE
LPOP
RPOP
LINDEX LIST 1 通过下标获取值
llen list 返回列表长度
lrem list 1 one 移除1个one
###############################
ltrim list 1 2 通过下标截取指定长度

lset list 1 other 通过下标修改值
######################

总结:
实际上是个链表,left right都可插入
如果key不存在创建新的链表
如果key存在新增内容
如果移除所有值,空链表也代码不存在
在两遍插入或修改值,效率最高,中间元素效率低些
使用场景:消息队列(Lpush Rpop) 栈(Lpush Lpop)

SET

SET值不可重复


sadd myset "hellow"
smembers myset
scard myset 获取元素个数
sismember myset "hellow" 判断元素是否在集合中
srem myset "hellow" 移除元素
srandmember myset 2 随机抽选出n个元素

smove myset myset2 "hellow" 移动元素
sdiff myset myset2 差集
sinter myset myset2 交集
suniin myset myset2 并集


微博,A用户的粉丝活关注的人

Hash

Map集合 key-map
hset myhash key value
hget myhash key
hmset myhash key1 value1 key2 value2
hget myhash key1 key2
hgetall myhash
hdel myhash key1
hlen myhash
hexists myhash key
hkeys myhash 获取所有key
hincr myhash key 1 自增
hincr myhash key -1
hdecr myhash key 1 自减

原文地址:https://www.cnblogs.com/wangyingshuo/p/14267674.html