redis数据结构整理(一)

摘要:

0.redis安装

1.redis的常用数据结构类型

1.1  String

1.2  List

1.3  Set

1.4  Sorted Set

1.5  Hash

2.redis是单进程单线程的

3.管道

4.我的测试代码

内容总结

0.redis安装

官网地址 http://redis.io/

下载:wget http://download.redis.io/releases/redis-3.2.4.tar.gz

解压:tar xzf redis-3.2.4.tar.gz

编译:cd redis-3.2.4

make

启动服务端:src/redis-server

客户端测试:src/redis-cli

1. redis的常用数据结构类型

1.0 key

1.0.1常用命令:

  exits:判断key是否存在

  del:删除key

  type:返回key对应的value类型

  keys pattern:返回正则匹配到的keys

  dbsizes:返回当前数据库的key总数

  expire:设置过期时间,单位是秒

1.0.2实现方式:

  非二进制安全的字符类型( not binary-safe strings ),所以像“my key”和“mykey\n”这种包含空格和换行的key是不允许的

1.1 String(也可以是数字)
1.1.1常用命令
  set,
  get,
  decr,
  incr,
  mget:两两设置多个键值对,
1.1.2实现方式:
  String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作是会转成数值型进行计算,此时redisObject的encoding字段为int
1.2 List
1.2.1常用命令
  lpush:对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型
  rpush:对应list的尾部添加字符串元素,返回1表示成功,0表示key存在且不是list类型
  lpop:从list的头部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误
  rpop:从list的尾部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误
  lrange: 返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素 ,key不存在返回空列表
1.2.2 实现方式
  redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。
1.3 Set
1.3.1常用命令
  sadd:
  spop:
  smembers:返回key对应set的所有元素,结果是无序的
1.3.2实现方式
  set的是通过hash table实现的,hash table会随着添加或者删除自动的调整大小
1.4 Sorted Set
1.4.1常用命令
  zadd:
  zrem:
1.4.2实现方式
  sorted set的实现是skip list和hash table的混合体。当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,另一个score到元素的映射被添加到skip list
并按照score排序,所以就可以有序的获取集合中的元素。
1.5 Hash
1.5.1常用命令
  hset:
  hget:
  hmget:
  hmset:
1.5.2实现方式
  hash是一个string类型的field和value的映射表。
2. redis是单进程单线程的
3. 管道(pipeline)
  redis是一个cs模式的tcp server,使用和http类似的请求响应协议。一个client可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client。基本的通信过程如下
Client: INCR
Server: 1
Client: INCR
Server: 2
Client: INCR
Server: 3
Client: INCR
Server: 4
  基本上四个命令需要8个tcp报文才能完成。由于通信会有网络延迟,假如从client和server之间的包传输时间需要0.125秒。那么上面的四个命令8个报文至少会需要1秒才能完成。
利用pipeline的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。通信过程如下
Client: INCR
Client: INCR
Client: INCR
Client: INCR
Server: 1
Server: 2
Server: 3
Server: 4

4.我的测试代码

  https://github.com/Tongzhenguo/Java-codes/blob/master/src/main/java/redis/MyCachePrograme.java

  

  

时间: 2025-01-14 14:38:33

redis数据结构整理(一)的相关文章

我的redis缓存机制和redis数据结构整理(一)

摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单线程的 3.管道 4.我的测试代码 内容总结 0.redis安装 官网地址 http://redis.io/ 下载:wget http://download.redis.io/releases/redis-3.2.4.tar.gz 解压:tar xzf redis-3.2.4.tar.gz 编译:c

redis数据结构整理(二)

摘要: 1.各个数据结构的应用举例 1.1 String类型应用举例 1.2List类型应用举例 1.3Set类型应用举例 1.4Sorted Set类型应用举例 1.5Hash类型应用举例 内容: 1.各个数据结构的应用举例 1.1 String类型应用举例: 利用INCR,DECR命令来构建计数器系统. 1.2List类型应用举例 利用list的栈特性实现取最新n条数据的功能 利用list的队列特性实现简单消息队列 1.3Set类型应用举例 去重操作 1.4Sorted Set类型应用举例

REdis数据结构服务器

Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在CentOS 5.7上学习入门文章: 1.Redis简介  Redis是一个key-value存储系统.和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表).sets(集合)和zsets(有序集合)几种数据类型.这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的. 2.Redis的

Redis笔记整理(三):进阶操作与高级部分

[TOC] Redis笔记整理(三):进阶操作与高级部分 Redis发布订阅 Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis客户端可以订阅任意数量的频道. 下图展示了频道channel1,以及订阅这个频道的三个客户端--client1,client2,client5之间的关系. 当有新消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅它的三个客户端: 相关操作命令如下: 命令 描述 PSUBS

Redis 数据结构使用场景

Redis 数据结构使用场景 redis共有5种数据结构,每种的使用场景都是什么? 一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String——字符串 Hash——字典 List——列表 Set——集合 Sorted Set——有序集合 下面我们就来简单说明一下它们各自

Redis 知识整理

前言: Redis 介绍:Key-Value.内存数据库.支持持久化 Redis 数据结构:string(字符串),hash(哈希),list(列表),set(集合)及 zset (sorted set:有序集合) Redis 应用场景:访问频繁的数据(缓存):及时性要求不高的且频繁功能数据: 不变的明细数据且需要频繁运算的:及队列数据(非官方个人经验) Redis 可视化工具:RedisDesktopManager    安装文件传送门 一.安装 轻量级安装文件才几MB,都是程序员差距如此之大

Redis数据结构之robj

本文及后续文章,Redis版本均是v3.2.8 我们知道一个database内的这个映射关系是用一个dict来维护的.dict的key固定用一种数据结构来表达,这这数据结构就是动态字符串sds.而value则比较复杂,为了在同一个dict内能够存储不同类型的value,这就需要一个通用的数据结构.针对不同的使用场景,这个通用的数据结构可以使用不同的数据结构实现,这样可以优化在不同场景下的效率.这个通用的数据结构就是robj(redisObject),也是本文主要探讨的redis中的对象是怎么实现

Redis 数据结构之dict(2)

本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis 数据结构之dict>,我们对dict的结构有了大致的印象.此篇文章对dict是如何维护数据结构的做个详细的理解. 老规矩还是打开Redis的源码,文件dict.c 一.dict数据结构的维护 1.dictCreate - 创建一个新的哈希表 /* Reset a hash table already initialized with ht_init(). * NOTE: This function should only b

Redis数据结构之intset

本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis数据结构之robj>,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST, OBJ_SET,OBJ_ZSET,OBJ_HASH.集合对象set有着广泛的实际业务应用场景,它包含的元素无序并且不能重复及集合间的交.并.差等基础的操作.本篇就来说说Redis暴露给我们使用的set集合对象的底层实现-intset. 其实,可以理解为有序整型集合 intset是一个由整数组成的有序集合,