Redis(2015.08.03笔记一)
一、redis简介
Redis是一种面向"键/值"对数据类型的内存数据库,可以满足我们对海量数据的读写需求。
redis的键只能是字符串
redis的值支持多种数据类型:
1:字符串 string
2:哈希 hash
3:字符串列表 list
4:字符串集合 set 不重复(只用于string),无序
5:有序集合sorted set ,不重复,有序
6:HyperLogLog 结构(redis2.8.9版本才有,用来做基数统计的算法。)
特点:
高性能(Redis读的速度是11W次/s,写的速度是8.1W次/s)
原子性(保证数据的准确性,原子操作,)
持久存储(两种方式RDB/快照,AOF/日志)
主从结构(master-slave,负载均衡,高可用)
集群(3.0版本)
应用:应用在高并发和实时请求的场景。
新浪微博
hash:关注列表,粉丝列表
string:微博数,粉丝数(避免使用select count(*) from...)
sorted set:TopN,热门微博

redis使用的是c语言实验的
二、环境搭建
首先安装c的编译环境
yum -y install cpp
yum -y install binutils
yum -y install glibc
yum -y install glibc-kernheaders
yum -y install glibc-common
yum -y install glibc-devel
yum -y install gcc
yum -y install make
如果上面的软件都安装之后再执行make命令还报错,就需要在make命令后面加个选项了
make MALLOC=libc
http://www.phperz.com/article/14/1219/42002.html
















redis安装部署(单机)
redis官网:http://redis.io/(中文www.redis.cn)
解压:tar -zxvf redis-2.8.19.tar.gz
编译、安装
make
make install(将redis-3.0.0/src目录下面的可执行文件拷贝到/usr/local/bin目录下面,作用是在其他目录下执行脚本不需要指定绝对路径或者需要切换到路径才能执行脚本,相当于添加环境变量(将src配置到PATH))
加压缩后,执行make命令编译redis

make install

拷贝配置文件
cp redis/redis.conf /etc/

修改配置文件redis.conf

daemonize yes(后台运行)

logfile /usr/local/redis/log(后台启动的日志文件存放路径)

启动
redis-server /etc/redis.conf [--port 6379]



redis客户端(client,连接到本地的数据库)
redis-cli [-h 127.0.0.1] [-p 6379]


-h(连接的是哪一个数据库)-p(是端口号)

关闭
redis-cli shutdown

其他路径都可以调用bin目录下的shell脚本,

 目录下面
目录下面

(启动)redis-server


daemonize yes(后台运行)
logfile /usr/local/redis/log(日志文件)
查进程ps –ef|grep redis
停止

停止后需要重新启动才能进入

三、redis的特性【多数据库】
多数据库
每个数据库对外都是以一个从0开始的递增数字命名,不支持自定义的
redis默认支持16个数据库,可以通过修改databases参数来修改这个默认值
redis默认选择的是0号数据库
SELECT 数字: 可以切换数据库
多个数据库之间并不是完全隔离的,flushall
0-15,修改配置文件(修改数值)


数据库之间是相互隔离的

清空所有的数据库(停掉这个命令)

四、redis基础命令
获得符合规则的键名称
keys 表达式(?,* ,[],\?)
判断一个键是否存在
exists key
删除键
del key
del key1 key2
批量删除
redis-cli del `redis-cli keys "key*"`
获得键值的数据类型type
返回值可能是这五种类型(string,hash,list,set,zset)
注意:redis不区分命令大小写
keys *(查询所有的键,*是通配符)

keys crxy*
key crxy?

\?(转义字符查询问号)
查询键是否存在exists crxy

删除键
(integer(整数),返回值是2,说明成功删除2个)

在外面执行key *操作

在外面批量删除满足某些条件的键,反引号执行命令并获取返回值,相当于先执行redis-cli,进入后再执行删除

将命令传给脚本执行
获取键的类型 
redis的help命令
"help @<group>" to get a list of commands in <group>
"help <command>" for help on <command>
"help <tab>" to get a list of possible help topics
"quit" to exit

列出的命令都是可以操作string类型的

按tab补全命令(小技巧)

五、redis数据类型之string
字符串类型是redis中最基本的数据类型,它能存储任何形式的内容,包含二进制数据,甚至是一张图片(二进制内容)。一个字符串类型的值存储的最大容量是1GB
命令
set/get(setnx)
mset/mget
incr/decr/incrby/decrby/incrbyfloat
append(string键,假如储存的是2.1,可以认为这是个字符串,它可以转换为integer或者float类型)
strlen(查看值的长度)
可到官网查看
命令
set/get(setnx)
mset/mget(设置多个键值/查看多个键值)

setnx会判断是否处在(set直接赋值,不会判断值是否存在)

incr(每次递增加1,前提是值是数字类型,若不是则会报错)

递减删除1(decr)

每次递增加几incrby

可以是小数和负数

拼接append,获取字符串长度(strlen)

6表示字符串的长度
六、redis数据类型之hash
hash类型的值存储了字段和字段值的映射,字段值只能是字符串,不支持其他数据类型。hash类型的键至多可以存储2^32-1个字段。
hash类型适合存储对象:如图:1-1和1-2
redis可以为任何键增减字段而不影响其他键
命令
hset/hget/hmset/hmget/hgetall(hsetnx)
hexists,判断键中的属性是否存在
hincrby(hash类型没有hincr命令)
hdel
hkeys/hvals
hlen(获取键中包含多少个字段)

key=value
(键=值)

hset(储存)user:100(这是个有意义键名,用户:用户ID,方便以后查找),hget(查询)

hmset(同时设置多个属性),hmget(同时查询多个属性)Gender0、1性别是男或女

hsetnx(如果有就创建,否则不创建)

递增操作
hincrby

(hdel)删除某个字段
hget(查询键值)


exists user:100(通用查询键是否存在)
七、redis数据类型之list
list是一个有序的字符串列表,列表内部实现是使用双向链表(linked list)实现的。
list还可以作为队列使用(后面讲)
一个列表类型的键最多能容纳2^32-1个元素。
命令
lpush/rpush/lpop/rpop
llen/lrange(-1表示最后一个元素的位置,-2倒数第二个元素)
lrem(lrem key count value)count分为三种情况
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
lindex(查询指定角标数据)
lset(修改指定角标的元素)
ltrim(截取)
linsert before|after(向指定元素前后插入元素)
rpoplpush:将元素从一个列表转到另一个列表
Lpush是左侧插入,rpush是从列表右侧插入数据

lpop(从列表左侧弹出元素,弹出后就是删除列表中的元素),rpop(从列表右侧弹出元素)

负数就是获取最后一个元素的角标(当无法获知list里面有多少个元素时,-1当成最后一个元素的角标)

llen list是获取列表元素的长度

lrem list 2 a(正数,从列表的左侧开始查找,将正数个元素删掉,负数就是从右侧查找,删除绝对值个元素)

lrem list -1 a右侧

lrem list 0 a(如果是0就会删除所有元素)

lset修改指定角标的值

ltrim截取

插入




八、redis数据类型之set
set集合中的元素都是不重复的,无序的,一个集合类型键可以存储至多 2^23-1(long类型的最大值)个元素
set集合类型和list列表类型的相似之处,如图:2-1所示
命令
sadd/smembers/srem/sismember
sdiff/sinter(交集)/sunion(并集)
sdiffstore/sinterstore/sunionstore
scard(获取集合长度)/spop(随机从集合中取出并删除一个元素)
srandmember key [count]
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

sadd set a(随机插入a元素到set名称的集合)smembers set(获取集合里面的所有的元素,元素是无序的)

Srem set a b(删除集合里面的某些元素)(判断集合是否存在某个元素,返回值1/0(存在/不存在))

sdiff set set1(求集合set有的元素而集合set1却没有的元素,集合顺序互换改变求值也会互换)

sinter(求交集,集合顺序不影响)

并集

sunionstore aaa set set1 (将set和set1 并集储存在aaa)



srandmember set1 2(从集合中随机返回2个元素,2是正数,返回值小于等于集合元素数量,元素值不重复)

负数取的元素可能重复

Redis(2015.08.03笔记一)的更多相关文章
- Storm(2015.08.12笔记)
		2015.08.12Storm 一.Storm简介 Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架. Storm能实现高频数据和大规模数据的实时处理. 官网资料显示s ... 
- Zookepper(2015.08.16笔记)
		2015.08.16zookepper Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务(如同小区里面的供水.电的系统) 它包含一个简单的原 ... 
- OpenStack Weekly Rank 2015.08.03
		Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 7 1 1 7 11 Sw ... 
- redis 安装配置学习笔记
		redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://downl ... 
- Redis集群学习笔记
		Redis集群学习笔记 前言 最近有个需求,就是将一个Redis集群中数据转移到某个单机Redis上. 迁移Redis数据的话,如果是单机Redis,有两种方式: a. 执行redis-cli shu ... 
- 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)
		本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ... 
- 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)
		本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ... 
- 【Redis】命令学习笔记——字符串(String)(23个超全字典版)
		Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 本篇基于redis 4.0.11版本,学习字符串( ... 
- 【Redis】命令学习笔记——键(key)(20个超全字典版)
		安装完redis和redis-desktop-manager后,开始学习命令啦!本篇基于redis 4.0.11版本,从对键(key)开始挖坑! 准备工作,使用db1(默认db0,由于之前练习用db0 ... 
随机推荐
- ECMAScript 6 笔记(五)
			Iterator和for...of循环 1. Iterator(遍历器)的概念 Iterator接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环 遍历器(Iterato ... 
- Madifest文件详解
			介绍 Madifest是个XML的描述文件,对于每个DLL有DLL的Manifest文件,对于每个应用程序Application也有自己的Manifest.对于应用程序而言,Manifest可以是一个 ... 
- asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
			asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ... 
- 理解javascript this 的绑定过程
			在理解this 的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的位置).只有仔细分析调用位置才能回答这个问题:这个this 到底引用的是什么?通常来说,寻找调用位 ... 
- bootstrap-标签页
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- ESP8266使用详解--基于Lua脚本语言
			这些天,,,,今天终于看到了希望,,,天道酬勤 先说实现的功能...让ESP8266连接无线网,然后让它建立服务器,,我的客户端连接上以后,发给客户端发数据模块打印到串口,,往ESP8266串口里发数 ... 
- 基于Spring DM管理的Bundle获取Spring上下文对象及指定Bean对象
			在讲述服务注册与引用的随笔中,有提到context.getServiceReferences()方法,通过该方法可以获取到OSGI框架容器中的指定类型的服务引用,从而获取到对应的服务对象.同时该方法还 ... 
- git链接GitHub命令及基本操作
			Git是一款不错的代码管理工具,下面引用百科的一段话: Git是用于Linux内核开发的版本控制工具.与CVS.Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服 ... 
- 读书笔记 effective c++ Item 26 尽量推迟变量的定义
			1. 定义变量会引发构造和析构开销 每当你定义一种类型的变量时:当控制流到达变量的定义点时,你引入了调用构造函数的开销,当离开变量的作用域之后,你引入了调用析构函数的开销.对未使用到的变量同样会产生开 ... 
- javascript作用域和闭包之我见
			javascript作用域和闭包之我见 看了<你不知道的JavaScript(上卷)>的第一部分--作用域和闭包,感受颇深,遂写一篇读书笔记加深印象.路过的大牛欢迎指点,对这方面不懂的同学 ... 
