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、面向海量数据访问的面向文档数据库:

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

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

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

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

当今十大主流的关系型数据库
OracleMicrosoft SQL ServerMySQLPostgreSQLDB2
Microsoft AccessSQLiteTeradataMariaDB(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的数据结构有:

在这里插入图片描述

    1. 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 命令批量存储字符串键值对

        1. SET user: {userId} value(json格式数据) 可以通过Redis缓存数据格式
        2. MSET user:1:name zhuge user:1:balance 1888
          MGET user:1:name user:1:balance
          在这里插入图片描述
    1. 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集群架构下不适合大规模使用

    1. 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列表表头弹出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待
      BRPOP  key  [key ...]  timeout 	//从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待
      
      常用数据结构
      Stack() = LPUSH + LPOP
      Queue(队列)= LPUSH + RPOP
      Blocking MQ(阻塞队列)= LPUSH + BRPOP
      
    1. 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、我可能认识的人

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

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

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

      1. 诸葛老师关注的人:
        zhugeSet-> {guojia, xushu}
      2. 杨过老师关注的人:
        yangguoSet–> {zhuge, baiqi, guojia, xushu}
      3. 郭嘉老师关注的人:
        guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)
      4. 我和杨过老师共同关注:
        SINTER zhugeSet yangguoSet–> {guojia, xushu}
      5. 我关注的人也关注他(杨过老师):
        SISMEMBER guojiaSet yangguo
        SISMEMBER xushuSet yangguo
      6. 我可能认识的人:
        SDIFF yangguoSet zhugeSet->(zhuge, baiqi}
    1. 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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis的数据类型有String、Hash、List、Set、Zset、GEO、Stream、HyperLogLog和Bitmap。在实际应用中,不同的数据类型可以用于不同的场景。 1. String类型:主要用于缓存和存储单个的值,比如用户的登录信息、计数器等。 2. Hash类型:适用于存储和获取对象的多个字段,比如存储用户的信息、商品的属性等。 3. List类型:可以按照插入顺序存储多个值,并支持在列表的两端进行插入和删除操作,比如消息队列、实时聊天记录等。 4. Set类型:用于存储多个不重复的值,也可以进行交集、并集、差集等操作,比如存储用户的好友列表、标签等。 5. Zset类型:有序集合,每个元素都会关联一个分数,可以根据分数进行范围查找和排序,适用于排行榜、带权重的数据等。 6. GEO类型:用于地理位置信息的存储和查询,可以计算距离、查找附近的位置等。 7. Stream类型:适用于消息队列的场景,可以按照时间顺序存储和消费消息。 8. HyperLogLog类型:用于统计独立元素的个数,可以进行基数估算,适用于统计UV、PV等场景。 9. Bitmap类型:用于位图操作,可以进行位运算和统计,比如用户签到、在线状态等。 在实际应用中,根据具体的需求和数据特点,选择合适的Redis数据类型可以带来更好的性能和扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [最全总结Redis数据类型使用场景](https://blog.csdn.net/qq_27681741/article/details/125289210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值