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
redis数据结构整理(一)的更多相关文章
- redis数据结构整理(二)
		
摘要: 1.各个数据结构的应用举例 1.1 String类型应用举例 1.2List类型应用举例 1.3Set类型应用举例 1.4Sorted Set类型应用举例 1.5Hash类型应用举例 内容: ...
 - Redis数据结构
		
Redis数据结构 Redis数据结构详解(一) 前言 Redis和Memcached最大的区别,Redis 除啦支持数据持久化之外,还支持更多的数据类型而不仅仅是简单key-value结构的数据 ...
 - redis数据结构、持久化、缓存淘汰策略
		
Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题.redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放 ...
 - Redis 数据结构使用场景
		
转自http://get.ftqq.com/523.get 一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的 ...
 - Redis数据结构底层知识总结
		
Redis数据结构底层总结 本篇文章是基于作者黄建宏写的书Redis设计与实现而做的笔记 数据结构与对象 Redis中数据结构的底层实现包括以下对象: 对象 解释 简单动态字符串 字符串的底层实现 链 ...
 - Redis 数据结构与内存管理策略(上)
		
Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
 - Redis 数据结构与内存管理策略(下)
		
Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
 - Redis知识整理
		
Redis知识整理 转自:https://www.cnblogs.com/rjzheng/p/9096228.html 1.单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返 ...
 - Redis数据结构之intset
		
本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis数据结构之robj>,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST ...
 
随机推荐
- Codeforces Round #379 (Div. 2) Analyses By Team:Red & Black
			
A.Anton and Danik Problems: 给你长度为N的,只含'A','D'的序列,统计并输出何者出现的较多,相同为"Friendship" Analysis: lu ...
 - nginx搭建笔记
			
1. nginx安装 Env: Mac OS 10.10 Yosemite pcre: http://pcre.org/ $tar -zxf pcre-8.34.tar.gz $cd pcre-8.3 ...
 - Unity3D将来时:WebGL
			
作者:小玉链接:https://zhuanlan.zhihu.com/p/19974794来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 随着Unity5.0的发布,W ...
 - GridView基础知识
			
首先,gridview是封装好的,直接在设计界面使用,基本不需要写代码: 1.绑定数据源 GridView最好与LinQDatasourse配合使用,相匹配绑定数据: 2.外观控制 整体控制 自动选择 ...
 - project 2016 11 20 树的多项式
			
#include <iostream>#include <stack>#include <cmath>#include <sstream> using ...
 - Mysql数据库表关于几个int类型的字符长度
			
Data type Range Storage bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,8 ...
 - 好文推荐系列---------JS模板引擎
			
这篇文章写的很清晰,不再赘述,直接上链接:http://www.tuicool.com/articles/aiaqMn
 - 修改centos启动项
			
centos7下修改启动项在路径/etc/grub.d/文件路径下,修改完成之后需要运行命令 grub2-mkconfig --output=/boot/grub2/grub.cfg
 - Codeforces #380 div2 E(729E) Subordinates
			
E. Subordinates time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
 - XStream学习笔记
			
XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...