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 ...
随机推荐
- 自定义IHttpModule
HttpModule作用是 IIS将接收到的请求分发给相应的ISAPI处理前,先截获该请求. 通过这个我们可以完成很多额外功能. 自定义IHttpModule的例子: 通过自定义HttpModule, ...
- 【4Large-Style】前端框架设计——Button 的设计思路
Button 的设计 Button 作为基本的 Web 元素,看似简单,却需要非常用心的设计,因为 Button 作为按钮,是具有多个不同的状态,每种状态都基本上需要进行一些特殊的优化设计,以让组件更 ...
- bootstrap 响应式工具
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Unity编程标准导引-3.2 MonoBehavior 组件父类重构
本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 3.2MonoBehavior 组件父类重构 为了让我们的组件类用起来更方便,我们将上一节的 ...
- 【转】IntelliJ IDEA2016.1 + maven 创建java web 项目
最近开始使用idea 来写java项目了,这个很流行,相比Eclipse方便了很多.功能多了,相对应的使用的复杂度也较高了,因为网上很多的使用和创建项目的简单教程,都是基于老版本的,每个新版本都有不一 ...
- ios跳转到系统设置
在项目中,我们经常会碰到使用位置的需求.当用户设置app不允许使用位置的时候,最好的用户体验就是直接调转到系统的位置设置界面,进行设置. 第一 跳转到自己项目(在需要调转的按钮动作中添加如下的代码,就 ...
- BZOJ 2463: [中山市选2009]谁能赢呢?(博弈论)
好吧我能说这道题我是猜过去的么= =,看到只有一个数x,x=2时alice赢,就猜奇数bob赢,偶数alice赢,然后就稀里糊涂过了= = 后来找了http://www.haogongju.net/a ...
- 随手小记(es6)
在学习前辈阮一峰大神写的<ECMAScript入门>一书的过程中,第九章中讲到对象扩展时,第一条我就有点看不懂 ES6允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. v ...
- 每天一个Linux命令(18)--locate命令
locate让使用者可以很快速的搜寻档案系统内是否有指定的档案.器方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就需查询这个数据库,而不必实际深入档案系统之中了.在一般的 ditr ...
- Think PHP 基础
ThinkPHP 一.什么框架: 一堆代码的集合,里边有变量.函数.类.常量,里边也有许多设计模式MVC.AR数据库.单例等等. 框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次. ...