Redis数据格式和实际应用

Redis数据格式和实际应用,第1张

Redis数据格式和实际应用 Redis介绍

数据结构服务器,redis是一个key-value 存储系统。非关系数据库。

Redis经常用于缓存、秒杀、分布式锁等场景使用

非关系型数据库的分类

1、面向高性能并发读写的key-value数据库:

key-value数据库的主要特点是具有极高的并发读写性能
Key-value数据库是一种以键值对存储数据的一种数据库,类似Java中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个唯一的值。

主流代表为 Redis, Amazon DynamoDB, Memcached,Microsoft Azure Cosmos DB和Hazelcast

2、面向海量数据访问的面向文档数据库:

这类数据库的主要特点是在海量的数据中可以快速的查询数据
文档存储通常使用内部表示法,可以直接在应用程序中处理,主要是JSON。JSON文档也可以作为纯文本存储在键值存储或关系数据库系统中。
主流代表为MongoDB,Amazon DynamoDB,Couchbase,
Microsoft Azure Cosmos DB和CouchDB

3、面向搜索数据内容的搜索引擎:

搜索引擎是专门用于搜索数据内容的NoSQL数据库管理系统。
主要是用于对海量数据进行近实时的处理和分析处理,可用于机器学习和数据挖掘
主流代表为Elasticsearch,Splunk,Solr,MarkLogic和Sphinx

CAP: Consistency、Availability、Partition tolerance ,**一个分布式系统不可能同时满足C(一致性)、A(可用性)、P(分区容错性)**三个基本需求,并且最多只能满足其中的两项。

当今十大主流的关系型数据库
Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,
Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP

1、redis的安装和启动 1.1 redis的安装 1.2 redis的启动

windows环境下进入安装的redis的安装包中,输入以下命令

redis-server redis.windows.conf

设置服务命令,

redis-server --service-install redis.windows-service.conf --loglevel verbose

卸载服务:redis-server --service-uninstall

开启服务:redis-server --service-start

停止服务:redis-server --service-stop

1.3 测试连接
redis-cli.exe -h 127.0.0.1 -p 6379
redis-cli -a "xidian@123"
#需要密码
redis-cli -h host -p port -a password 
#设置密码
config set requirepass xidian@123
1.4 查看所有key
KEYS pattern
keys *
2、Redis的数据结构及使⽤场景

big key问题: key对应的值很大加big key问题

Redis的数据结构有:

    string 字符串:可以⽤来做最简单的数据缓存,可以缓存某个简单的字符串,也可以缓存某个json格式的字符串,Redis分布式锁的实现就利⽤了这种数据结构,还包括可以实现计数器、Session共享、分布式ID

    字符串常用 *** 作
    SET  key  value 			//存入字符串键值对
    MSET  key  value [key value ...] 	//批量存储字符串键值对
    SETNX  key  value 		//存入一个不存在的字符串键值对
    GET  key 			//获取一个字符串键值
    MGET  key  [key ...]	 	//批量获取字符串键值
    DEL  key  [key ...] 		//删除一个键
    EXPIRE  key  seconds 		//设置一个键的过期时间(秒)
    
    原子加减
    INCR  key 			//将key中储存的数字值加1
    DECR  key 			//将key中储存的数字值减1
    INCRBY  key  increment 		//将key所储存的值加上increment
    DECRBY  key  decrement 	//将key所储存的值减去decrement
    

    单值缓存:SET key value GET key

    对象缓存: 可以使用MSET 命令批量存储字符串键值对

      SET user: {userId} value(json格式数据) 可以通过Redis缓存数据格式MSET user:1:name zhuge user:1:balance 1888
      MGET user:1:name user:1:balance

    hash 哈希表:可以⽤来存储⼀些key-value对,更适合⽤来存储对象 ,实用场景,电商购物车

    (以用户id为key、商品id为field、商品数量为value)

    Hash常用 *** 作
    HSET  key  field  value 			//存储一个哈希表key的键值
    HSETNX  key  field  value 		//存储一个不存在的哈希表key的键值
    HMSET  key  field  value [field value ...] 	//在一个哈希表key中存储多个键值对
    HGET  key  field 				//获取哈希表key对应的field键值
    HMGET  key  field  [field ...] 		//批量获取哈希表key中多个field键值
    HDEL  key  field  [field ...] 		//删除哈希表key中的field键值
    HLEN  key				//返回哈希表key中field的数量
    HGETALL  key				//返回哈希表key中所有的键值
    
    HINCRBY  key  field  increment 		//为哈希表key中field键的值加上增量increment
    

    对象缓存
    HMSET user {userId}:name zhuge {userId}:balance 1888
    HMSET user 1:name zhuge 1:balance 1888

    HMSET user 2:name yangguo 2:balance 1600

    HMGET user 1:name 1:balance

    Hash数据结构和String数据结构的优缺点:

    优点
    1)同类数据归类整合储存,方便数据管理
    2)相比string *** 作消耗内存与cpu更小
    3)相比string储存更节省空间

    缺点
    过期功能不能使用在field上,只能用在key上
    Redis集群架构下不适合大规模使用

    list 列表:Redis的列表通过命令的组合,可以实现做栈、队列、阻塞队列的数据结构,可以⽤来缓存类似微信公众号、微博等消息流数据

    List常用 *** 作
    LPUSH  key  value [value ...] 		//将一个或多个值value插入到key列表的表头(最左边)
    RPUSH  key  value [value ...]	 	//将一个或多个值value插入到key列表的表尾(最右边)
    LPOP  key			//移除并返回key列表的头元素
    RPOP  key			//移除并返回key列表的尾元素
    LRANGE  key  start  stop		//返回列表key中指定区间内的元素,区间以偏移量start和stop指定
    
    BLPOP  key  [key ...]  timeout	//从key列表表头d出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待
    BRPOP  key  [key ...]  timeout 	//从key列表表尾d出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待
    
    常用数据结构
    Stack(栈) = LPUSH + LPOP
    Queue(队列)= LPUSH + RPOP
    Blocking MQ(阻塞队列)= LPUSH + BRPOP
    

    set 集合:和列表类似,也可以存储多个元素,但是不能重复,集合可以进⾏交集、并集、差集 *** 作,从⽽可以实现类似,微信抽奖小程序,我和某⼈共同关注的⼈、朋友圈点赞等功能 。

    Set常用 *** 作
    SADD  key  member  [member ...]			//往集合key中存入元素,元素存在则忽略,
    							若key不存在则新建
    SREM  key  member  [member ...]			//从集合key中删除元素
    SMEMBERS  key					//获取集合key中所有元素
    SCARD  key					//获取集合key的元素个数
    SISMEMBER  key  member			//判断member元素是否存在于集合key中
    SRANDMEMBER  key  [count]			//从集合key中选出count个元素,元素不从key中删除
    SPOP  key  [count]				//从集合key中选出count个元素,元素从key中删除
    
    Set运算 *** 作
    SINTER  key  [key ...] 				//交集运算
    SINTERSTORE  destination  key  [key ..]		//将交集结果存入新集合destination中
    SUNIOn  key  [key ..] 				//并集运算
    SUNIOnSTORE  destination  key  [key ...]		//将并集结果存入新集合destination中
    SDIFF  key  [key ...] 				//差集运算
    SDIFFSTORE  destination  key  [key ...]		//将差集结果存入新集合destination中
    

    案例:可以完成微博一些 共同关注、我关注的人也关注他xx、我可能认识的人

    微信微博点赞,收藏,标签

      点赞 SADD like:{消息ID} {用户ID}取消点赞 SREM like:{消息ID} {用户ID}检查用户是否点过赞
      SISMEMBER like:{消息ID} {用户ID}获取点赞的用户列表
      SMEMBERS like:{消息ID}获取点赞用户数
      SCARD like:{消息ID}

    集合 *** 作实现微博微信关注模型

      诸葛老师关注的人:
      zhugeSet-> {guojia, xushu}杨过老师关注的人:
      yangguoSet–> {zhuge, baiqi, guojia, xushu}郭嘉老师关注的人:
      guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)我和杨过老师共同关注:
      SINTER zhugeSet yangguoSet–> {guojia, xushu}我关注的人也关注他(杨过老师):
      SISMEMBER guojiaSet yangguo
      SISMEMBER xushuSet yangguo我可能认识的人:
      SDIFF yangguoSet zhugeSet->(zhuge, baiqi}

    zset 有序集合:集合是⽆序的,有序集合可以设置顺序,可以⽤来实现排⾏榜功能

    ZSet常用 *** 作
    ZADD key score member [[score member]…]	//往有序集合key中加入带分值元素
    ZREM key member [member …]		//从有序集合key中删除元素
    ZSCORE key member 			//返回有序集合key中元素member的分值
    ZINCRBY key increment member		//为有序集合key中元素member的分值加上increment 
    ZCARD key				//返回有序集合key中元素个数
    ZRANGE key start stop [WITHSCORES]	//正序获取有序集合key从start下标到stop下标的元素
    ZREVRANGE key start stop [WITHSCORES]	//倒序获取有序集合key从start下标到stop下标的元素
    
    Zset集合 *** 作
    ZUNIOnSTORE destkey numkeys key [key ...] 	//并集计算
    ZINTERSTORE destkey numkeys key [key …]	//交集计算
    
redis使用了两种文件格式:全量数据和增量请求。

全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;

增量请求文件则是把内存中的数据序列化为 *** 作请求,用于读取文件进行replay得到数据,序列化的 *** 作包括SET、RPUSH、SADD、ZADD。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5704901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存