小白浅谈对redis的认识
2020-03-05 18:21
369 查看
Redis 是什么
基于键值的开源的存储服务系统
2.Redis的特征
1. 速度快: 数据存在哪里: 内存 什么语言写的: C语言 线程模式: 单线程 2. 持久化: Redis 所有数据保存在内存中,对数据的更新将异步的保存道磁盘上。 3. 支持多种编辑语言: 基于TCP的通信协议 Java / PHP / Python / node.js 4. 简单: 不依赖外部库 / 单线程模型 5. 多种数据结构: String / Hash / List / Set / Zset 6. 高可用: 主从复制: 主服务器,从服务器 7. 分布式: Redis-Cluster(V3.0)支持分布式
Redis单线程架构
串行- 单线程为什么这么快:
内存 / 非阻塞IO / 避免线程切换和竞态消耗 - 注意事项:
一次只运行一条命令
拒绝长(慢)命令
其实不是单线程
4.Redis数据结构的内部编码(基于时间和空间选择)
1. string : raw / int / embstr
2. hash : hashtable / ziplist
3. list : linkedlist / ziplist
4. set : hashtable / intset
5. zset : skiplist / ziplist
5.基本的五种数据类型应用场景和 API
1. string类型: 场景: 缓存 计数器(转发,点赞,评论数) 分布式锁 分布式session API : *get key 获取key对应的value *set key value 设置key-value *del key 删除key-value *incr key key自增1,如果key不存在,自增后get(key)=1 *decr key key自减1,如果key不存在,自减后get(key)=-1 *incrby key k key自增k,如果key不存在,自增后get(key)=k *decrby key k key自减k,如果key不存在,自减后get(key)=-k *set key value 不管key是否存在,都设置 *setnx key value key不存在,才设置 *set key value xx key存在,才设置 *mget key1 key2 key3 批量获取key,原子操作 *mset key1 value1 key2 value2 批量设置key-value *getset key newvalue set key newvalue并返回旧的value *append key value 将value追加到旧的value 2. hash 类型: 哈希键值结构:key field value 场景:用户信息 特点 Mapmap filed不能相同,value可以相同 API: *hget key field 获取hash key对应的field的value *hset key field value 设置hash key对应field的value *hdel key field 删除hash key对应field的value *hexists key field 判断hash key是否有field *hlen key 获取hash key field的数量 *hmget key field1 field2 ... fieldN 批量获取hash key的一批field对应的值 *hmset key field1 value1 field2 value2 ... fieldN valueN 批量设置hash key的一批field value *hgetall key 返回hash key对应所有的field和value *hvals key 返回hash key对应所有filed的value *hkeys key 返回hash key对应所有field 3. list 类型 结构:key elements 场景:微博TimeLine 特点: 有序 可以重复 左右两边可以插入弹入 API: *rpush key value1 value2 ... valueN 从列表右端插入值 *lpush key value1 value2 ... valueN 从列表左端插入值 *linsert key before|after value newValue 在list指定的值前|后插入newValue *lpop key 从列表左侧弹出一个item *rpop 从列表右侧弹出一个item *lrem key count value 根据count值,从列表中删除所有value相等的项 (1)count>0,从左到右,删除最多count个value相等的项 (2)count<0,从右到左,删除最多Math.abs(count)个value相等的项 (3)count=0,删除所有value相等的项 *ltrim key start end 按照索引范围修剪列表 *lrange key start end(包含end) 获取列表指定索引范围所有item *lindex key index 获取列表指定索引的item *llen key 获取列表长度 *lset key index newValue 设置列表指定索引值为newValue *blpop key timeout lpop阻塞版本,timeout是阻塞超时时间 *brpop key timeout rpop阻塞版本,timeout是阻塞超时时间(如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。) 扩展应用: 1、LRUSH + LPOP = Stack 栈:先进后出 2、LPUSH + RPOP = Queue 队列:先进先出 3、LPUSH + BRPOP = Message Queue 消息队列 4. set 类型 结构:key calues 特点:无序 无重复 支持集合间操作 应用:抽奖系统 给用户添加标签 给标签添加用户 共同关注 API: *sadd key element 向集合key添加element,如果element已经存在,添加失败 *srem key element 将集合key中的element移除掉 *scard key 计算集合大小 *sismember key element 判断element是否在集合中 *srandmember key count 从集合中随机挑选count个元素 *spop key 从集合中随机弹出一个元素 *smembers key 获取集合所有元素 *sdiff key1 key2 差集 *sinter key1 key2 交集 *sunion key1 key2 并集 5. zset类型 结构: key score values 特点:无重复元素 有序 应用:排行榜 API: *zadd key score element(可以是多对) 添加score和element *zrem key element(可以是多个) 删除元素 *zscore key element 返回元素的分数 *zincrby key increScore element 增加或减少元素的分数 *zcard key 返回元素的总个数 *zrange key start end 返回指定索引范围内的升序元素【分值】 *zrangebyscore key minScore maxScore 返回指定分数范围内的升序元素【分值】 *zremrangebyrank key start end 删除指定排名内的升序元素 *zremrangebyscore key minScore maxScore 删除指定分数内的升序元素
6.Redis客户端 - Jedis
1. Maven 依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> <type>jar</type> <scope>compile</scope> </dependency> 2. Jedis直连 package com.it.redis.redis001; import redis.clients.jedis.Jedis; public class demo { public static void main(String[] args) { //生成一个Jedis对象,这个对象负责和指定Redis节点进行通信 Jedis jedis = new Jedis("127.0.0.1", 6379); //jedis执行set操作 jedis.set("hello", "world"); //jedis执行get操作 String value = jedis.get("hello");//value=world } } 3. Jedis构造方法: Jedis( String host, int port, int connectionTimeout, int soTimeout ) host:Redsi 节点所在机器的IP port:Redis 节点的端口 connectionTimeout:客户端连接超时 soTimeout:客户端读写超时 4. Jedis连接池的使用: 1.从资源池姐Jedis对象 2.Jedis执行命令 3.返回执行结果 4.归还Jedis对象给连接池
转载于:https://www.cnblogs.com/guo541886/p/10477377.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 浅谈小白如何读懂Redis高速缓存与持久化并存及主从高可用集群 推荐
- 浅谈小白如何读懂Redis高速缓存与持久化并存及主从高可用集群 推荐
- Redis几个认识误区
- 浅谈Redis数据库的键值设计
- 在Java中,小白对集合框架的认识
- Redis学习(3)——认识配置文件redis.conf[转]
- 认识redis.conf文件
- 支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)
- 服务器数据库系列 - Redis几个认识误区
- 认识Redis
- Redis 认识的几个误区
- 小白第三篇 MyBatis核心组件浅谈
- Redis几个认识误区
- 初学Redis(1)——认识Redis
- [转]NoSQL数据库Redis几个认识误区
- base64 浅谈以及自己的认识
- 15天玩转redis —— 第七篇 同事的一次缓存操作引起对慢查询的认识
- 浅谈一下对通信的认识
- 浅谈对于RDD的认识
- 浅谈Redis数据库的键值设计