文档章节

Redis基础笔记(一)

Airship
 Airship
发布于 2016/01/28 11:00
字数 2428
阅读 72
收藏 4

Redis基础笔记

资源链接

推荐书籍:《Redis入门指南》

资源列表:

redis命令速查command |             CMD索引-中文 |             CMD树-中文

redis源码github

下载地址redis.io

The Little Redis book 入口

redis资料概要 @江南白衣 gist

redis资料汇总专题 nosqlfan (这个站有很多文章)

redis的设计与实现 文档

redis2.6带注释源码 github

redis 各种语言clientsclients

python redis cli redis-py

网络文章汇总 入口

文章列表:

十五分钟介绍Redis数据结构  入口

redis的订阅与发布 入口

redis之七种武器 入口

使用Redis的五个注意事项 入口

redis源码分析系列文章 入口

Largest Redis Clusters Ever 入口 (使用场景)

成人网站YouPorn使用Redis之经验谈 入口

相关项目

Redis监控web工具 redmon

简介

简介

Redis(REmote DIctionary Server),远程字典服务器,以字典结构存储数据,允许通过TCP协议读取字典中内容. 高性能键值对数据库

作用:

1.缓存系统: 可以为每个键设置TTL(Time To Live),生存时间到期后键会自动被删除
             可限定数据占用最大内存空间,数据大道空间限制后自动按照一定规则淘汰不需要键
2.任务队列: redis列表类型可以用来实现队列, 支持阻塞式读取,很容易用作高性能队列,还支持“发布/订阅“消息的模式

其他:

1.Redis中, 所有数据都存储在内存中, 但提供了持久化支持, 内存中数据可以异步写入硬盘, 不影响现有服务
2.与memcached对比, redis单线程模型, memcached支持多线程. 但redis支持高级数据类型和持久化

安装

安装

1.wget http://download.redis.io/releases/redis-2.6.16.tar.gz
2.tar -xzvf redis-2.6.16.tar.gz
3.cd redis-2.6.16
4.make
5.make install

osx

brew install redis

安装后,在/usr/local/bin下面有

redis-server     服务器, 重点
redis-cli        命令行客户端, 重点

redis-benchmark  性能测试工具
redis-check-aof  AOF文件修复工具
redis-check-dump RDB文件检查工具

启动

直接启动

redis-server #默认6379
redis-server --port 6380
# 启动命令中配置将覆盖配置文件中同名参数
redis-server /path/to/redis.conf --loglevel warning

通过初始化脚本运行(生产环境)

在安装包目录redis-2.6.16/utils/redis_init_script

1.将脚本复制到/etc/init.d目录下,文件名为 redis_端口号, 修改文件第六行 REDISPORT为相同端口号
2.建立目录
    /etc/redis           存放配置文件
    /var/redis/端口号    存放持久化文件
3.修改配置文件
    将配置文件redis-2.6.16/redis.conf 复制到/etc/redis目录下,以端口号命名 e.g.  6379.conf
    修改配置文件中部分参数
        daemonize   yes                         使redis以守护进程模式运行
        pidfile     /var/run/redis_端口号.pid   设置redis的PID文件按位置
        port        端口号                      设置监听的端口号
        dir         /var/redis/端口号           设置持久化文件存放位置

停止

redis-cli SHUTDOWN
//server断开所有客户端连接, 根据配置执行持久化, 最后退出

Redis命令行客户端

发送命令:
    redis-cli -h 127.0.0.1 -p 6379
    redis-cli PING
    redis-cli
命令返回值
    状态回复,e.g.  >PING
    错误恢复, e.g.  >ECMD
    整数回复, e.g.  >INCR foo
    字符串回复,e.g. >GET foo   >GET notexists`
    多行字符串回复,e.g. >KEYS *

五种数据类型及相应命令

基础命令(redis-cli)

  • 返回符合规则的键名列表

pattern支持通配符, ? * [] 等, 会遍历所有键, 当键的数量较多时影响性能

>KEYS pattern

e.g.

>SET bar 1
>KEYS *
  • 判断一个键是否存在

返回,0不存在,1存在

>EXISTS key

e.g.

127.0.0.1:6379> EXISTS bar
(integer) 1
127.0.0.1:6379> EXISTS foo
(integer) 0
  • 删除键

可以删除多个键, 返回删除的个数

>DEL key [key ...]

e.g.

127.0.0.1:6379> DEL bar
(integer) 1
127.0.0.1:6379> DEL bar
(integer) 0
  • 获取键值的数据类型

返回string,hash(散列),list(列表),set(集合),zset(有序集合)

>TYPE key

e.g.

127.0.0.1:6379> SET bar 1
OK
127.0.0.1:6379> TYPE bar
string

1. 字符串类型

最基本类型, 能存储任何形式/编码字符串, 包括二进制. 允许存储最大容量是512M

  • 赋值和取值命令

    >SET key value
    >GET key

e.g.

127.0.0.1:6379> SET hi "hello world"
OK
127.0.0.1:6379> GET hi
"hello world"
127.0.0.1:6379> GET abc
(nil)
  • 递增数字(当存储的字符串是整数形式时)

    当操作键不存在时,默认值0,第一次递增后结果1,当键值不是整数时,报错
    >INCR key
    原子操作,可用于类似访问量统计, 自增id
    
    >INCRBY key increment
    >INCRBY bar 2

e.g.

127.0.0.1:6379> INCR abc
(integer) 1
127.0.0.1:6379> GET abc
"1"
127.0.0.1:6379> INCRBY abc 2
(integer) 3
127.0.0.1:6379> GET abc
"3"
  • 减少数字

    >DECR key
    >DECRBY key decrement

e.g.

127.0.0.1:6379> DECR abc
(integer) 2
127.0.0.1:6379> DECRBY abc 2
(integer) 0
  • 浮点数

    >INCRBYFLOAT key increment
    >INCRBYFLOAT bar 2.7

e.g.

127.0.0.1:6379> GET bar
"1"
127.0.0.1:6379> INCRBYFLOAT bar 1.5
"2.5"
  • 向尾部追加

    返回追加字符串长度
    
    >APPEND key value

e.g.

>SET key hello
>APPEND key "world"
  • 获取字符串长度

    >STRLEN key

e.g.

127.0.0.1:6379> GET hi
"hello world"
127.0.0.1:6379> STRLEN hi
(integer) 11
  • 同时设置,获取多个键值

    >MGET key [key ...]
    >MSET key value [key value ...]

e.g.

127.0.0.1:6379> MSET k1 v1 k2 v2
OK
127.0.0.1:6379> GET k1
"v1"
127.0.0.1:6379> MGET k1 k2
1) "v1"
2) "v2"
  • 位操作

    >GETBIT key offset
    >SETBIT key offset value
    
    >BITCOUNT key [start] [end] #获取值为1的二进制位个数
    
    >BITOP operation destkey key [key ...] #对多个字符串类型键进行位运算, 并将结果存储到destkey
    e.g. BITOP OR res fol fo2
        GET res

e.g.

a  97 01100001

127.0.0.1:6379> SET k 'a'
OK
127.0.0.1:6379> GET k
"a"

127.0.0.1:6379> GETBIT k 0
(integer) 0
127.0.0.1:6379> GETBIT k 1
(integer) 1

127.0.0.1:6379> BITCOUNT k
(integer) 3

BP: redis对键的命名,  对象类型:对象id:对象属性

2. 散列类型

一种字典结构,其存储了字段(field)和字段值映射,但字段值只能是字符串,不支持其他数据类型(即散列类型不支持数据类型嵌套)

散列类型适合存储对象

对象类型:id - 对象属性 - 对象属性值
  • 基本命令

    >HSET key field value
    >HGET key field
    #HSET不区分插入更新
    
    >HMSET key field value [field value ...]
    >HMGET key field [field ...]
    
    >HGETALL key

e.g.

127.0.0.1:6379> HSET car name bmw
(integer) 1
127.0.0.1:6379> HGET car name
"bmw"

127.0.0.1:6379> HMSET car price 100 score 50
OK
127.0.0.1:6379> HMGET car name price score
1) "bmw"
2) "100"
3) "50"

127.0.0.1:6379> HGETALL car
1) "name"
2) "bmw"
3) "price"
4) "100"
5) "score"
6) "50"
  • 判断字段是否存在

    #存在返回1,否则返回0
    >HEXISTS key field

e.g.

127.0.0.1:6379> HEXISTS car name
(integer) 1
127.0.0.1:6379> HEXISTS car model
(integer) 0
  • 当字段不存在时赋值

    #已存在不进行任何操作, 不存在赋值
    >HSETNX key field value

e.g.

127.0.0.1:6379> HSETNX car name  abc
(integer) 0
127.0.0.1:6379> HGET car name
"bmw"

127.0.0.1:6379> HEXISTS car model
(integer) 0
127.0.0.1:6379> HSETNX car model 1
(integer) 1
127.0.0.1:6379> HGET car model
"1"
  • 增加数字

    >HINCRBY key field increment

e.g.

>HINCRBY person score 60
  • 删除字段

    >HDEL key field [field ...]

e.g.

HDEL car price
  • 只获取字段名或字段值

    >HKEYS key
    >HVALS key

e.g.

127.0.0.1:6379> HKEYS car
1) "name"
2) "price"
3) "score"
4) "model"
127.0.0.1:6379> HVALS car
1) "bmw"
2) "100"
3) "50"
4) "1"
  • 获取字段数量

    >HLEN key

e.g.

127.0.0.1:6379> HLEN car
(integer) 4

3. 列表类型

List, 可以存储一个有序的字符串列表, 列表内元素非唯一性,可以向两端加入元素,或者获得列表的某一个片段

内部使用双向链表实现,两端添加元素复杂度O(1), 通过索引访问的速度较慢

可以用在分页, 新鲜事, 记录日志等

  • 向列表两端增加元素(可同时增加多个)

    >LPUSH key value [value ...]
    >RPUSH key value [value ...]

e.g.

127.0.0.1:6379> LPUSH num 1 2 3
(integer) 3
127.0.0.1:6379> RPUSH num 0
(integer) 4
# 3 2 1 0
  • 从列表两端弹出元素

先移除一个元素,然后返回之

>LPOP key
>RPOP key

e.g.

127.0.0.1:6379> LPOP num
"3"
127.0.0.1:6379> RPOP num
"0"
  • 获取元素个数

    >LLEN key

e.g.

127.0.0.1:6379> LLEN num
(integer) 2
  • 获取片段(同python切片,-1表最后一个, stop超出返回最右边元素, start大于stop返回空)

    >LRANGE key start stop

e.g.

127.0.0.1:6379> LPUSH test a b c d e f g
(integer) 7
127.0.0.1:6379> LRANGE test 0 2
1) "g"
2) "f"
3) "e"
  • 删除列表中指定值的元素

    >LREM key count value
    
    删除列表中前count个值为value的元素,返回值为实际删除元素的个数
                count = 0 所有
                      > 0 从左边开始删count个
                      < 0 从右边开始删|count|个

e.g.

127.0.0.1:6379> LRANGE test 0 2
1) "g"
2) "f"
3) "e"
127.0.0.1:6379> LREM test 0 f
(integer) 1
127.0.0.1:6379> LRANGE test 0 2
1) "g"
2) "e"
3) "d"
  • 设置指定索引元素值

    >LINDEX key index
    >LSET key index value

e.g.

127.0.0.1:6379> LPUSH lt 3 2 1
(integer) 3
127.0.0.1:6379> LINDEX lt 0
"1"

127.0.0.1:6379> LSET lt 0 -1
OK
127.0.0.1:6379> LINDEX lt 0
"-1"
  • 只保留列表指定片段

    删除指定索引范围之外的所有元素
    >LTRIM key start end

e.g.

127.0.0.1:6379> LRANGE la 0 99
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> LTRIM la 0 2
OK
127.0.0.1:6379> LRANGE la 0 99
1) "6"
2) "5"
3) "4"
  • 向列表中插入元素

    >LINSERT key BEFORE|AFTER pivot value
    从左到右查找值为pivot的元素,然后根据BEFORE/AFTER决定将value插入该元素前面还是后面

e.g.

127.0.0.1:6379> LRANGE la 0 99
1) "6"
2) "5"
3) "4"
127.0.0.1:6379> LINSERT la AFTER 5 3
(integer) 4
127.0.0.1:6379> LRANGE la 0 99
1) "6"
2) "5"
3) "3"
4) "4"

将元素从一个列表转到另一个列表

RPOPLPUSH source destination
#RPOP,然后LPUSH,返回每个元素值,e.g.循环测试网址的可用性


本文转载自:http://www.wklken.me/posts/2013/10/19/redis-base.html#5

Airship
粉丝 44
博文 996
码字总数 20464
作品 0
南京
高级程序员
私信 提问
Redis基础笔记 (一)

Redis基础笔记 事务 SORT 生存时间 任务队列 发布/订阅模式 Python中使用Redis 实际实例 管理 其他 1. 字符串类型 2. 散列类型 3. 列表类型 4. 集合类型 5. 有序集合 简介 安装 资源链接 简介...

Airship
2016/02/18
21
0
python资料全集

python: 微信公众号开发小记——2.80端口上的服务 python: 微信公众号开发小记——3.接入三方登录 使用python编写一个壁纸网站的简单爬虫 python: python List 用法 Python 中各个时间复杂度...

d_watson
2016/04/15
175
0
redis命令及对应jedis操作(一)-String类型

我们知道学习编程知识,先要搭建环境,首先需要下载redis工具包,下载时需要注意,redis的偶数版是表示稳定版(2.4,2.6等),奇数版表示非稳定版(2.5,2.7等),我下载的是2.6的,最新版本...

laoyao
2014/07/26
0
3
大叔推荐博客索引

以下是我的所有推荐文章,其中多半是文章系列,并且这个索引会在以后过程中进行追加,所以,各位看到的,永远都不是最新的,呵呵! 大叔推荐文章系列 DotNetCore跨平台~文章索引~永久更新(...

mcy247
2017/12/05
0
0
Lind.DDD.Repositories.Redis层介绍

之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席之地,作为当今最红...

mcy247
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法 C#命名规范

一、匈牙利命名法:广泛应用于象Microsoft Windows这样的环境中。 Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙...

南风末
8分钟前
0
0
多线程安全(synchronized、三大特性、Java内存模型)

线程安全问题? 什么是线程安全问题?简单的说,当多个线程在共享同一个变量,做读写的时候,会由于其他线程的干扰,导致数据误差,就会出现线程安全问题。 比如说,多个窗口同时卖票这个案例...

天王盖地虎626
10分钟前
1
0
jenkins备份和自动部署

jenkins备份使用的是thinbackup插件。 安装完后在系统管理里滑动到最下面有个thinbackup菜单 点击进去即可开始备份。 backup Now是备份数据。 在填完settings里面的数据后 点击即可开始备份。...

起名字什么的太麻烦了
11分钟前
0
0
RDP服务之GoldBrute僵尸网络

最近的网络攻击活动中,可能要数BlueKeep漏洞的讨论热度最高了。但近日研究人员警告称,新发现的GoldBrute僵尸网络目前对Windows系统构成了不亚于BlueKeep带来的威胁。 1. 概览 安全研究人员...

Linux就该这么学
11分钟前
0
0
好程序员web前端教程分享JavaScript验证API

好程序员web前端教程分享JavaScript验证API,小编每天会分享一下干货给大家。那么今天说道的就是web前端培训课程中的章节。 JavaScript验证API   约束验证DOM方法 PropertyDescription ch...

好程序员IT
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部