Redis 入门

Redis 概述

Redis 是一个开源的内存数据结构存储器, 用作数据库, 缓存和消息代理.

它支持的数据结构类型有字符串string, 哈希 heshes, 列表 lists, 集合 sets, 带有范围查询的顺序集合 sorted set, 位图 bitmap, 超级日志hyperloglogs, 带有半径查询的地理空间索引 geospatial indexes

Redis 内置了复制, Lua脚本, LRU 回收, 事务和不同级别的持久化, 通过 Redis sentinel 和 Redis cluster 自动分区 提供了高可靠性

Redis 快速上手

安装

step1. brew install redis

$ find /usr/local/Cellar/redis/3.0.4/
./bin
./bin/redis-benchmark # redis performance benchmark tool
./bin/redis-check-aof # aof file repair tool
./bin/redis-check-dump # rdb file check tool
./bin/redis-cli # redis client
./bin/redis-sentinel
./bin/redis-server # redis server
./COPYING
./homebrew.mxcl.redis.plist
./INSTALL_RECEIPT.json
./README

step2. ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

卸载

$ brew uninstall redis
$ rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

使用

  • 默认端口是6379
  • 启动
# 指定端口启动
redis-server --port 6666

# 指定配置文件启动
redis-server /usr/local/etc/redis.conf

# 使用 launchctl 启动
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
  • 停止
redis-cli shutdown

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

命令行工具

  • redis-cli -h 127.0.0.1 -p 6379

  • redis-cli ping

  • redis-cli

基本命令

  • 赋值 set key value

  • 取值 get key

  • 递增 inc key

  • 递增指定整数 incby key increment

  • 递增指定浮点数 incbyfloat key increment

  • 递减 decr key

  • 追加值 append key value

    127.0.0.1:6379> set greeting good
    OK
    127.0.0.1:6379> append greeting ” morning”
    (integer) 12
    127.0.0.1:6379> get greeting
    “good morning”

  • 获取字串长度 strlen key

  • 同时设置和获取多值
    mset key1 val1 key2 val2
    mget key1 key2

  • 位操作
    getit key offset
    setbit key offset value
    bitcount key [start] [end]

复合类型

哈希

hset key field value
hget key field

列表

  • 添加元素
    从左首添加 lpush key values
    从右首添加 rpush key values

  • 弹出元素

从左首删除 lpop key
从右首删除 rpop key

  • 列表个数
    llen key

  • 列表子集
    lrange key start stop

  • 列表元素
    lindex key index
    lset key index value

集合

  • 添加元素
    sadd key members

  • 删除元素
    srem key members

  • 列表元素
    smembers key

  • 查询元素是否存在
    smember key member

  • 集合间运算
    sdiff keys
    sinter keys
    sunion keys

有序集合

高级功能

事务

要么都执行, 要么都不执行

multi
commands...
exec

Watch

Sort

TTL

队列Queue

  • Producer lpush
  • Cusumer roop

优先级队列

blpop
lpush

发布/订阅 Pub/Sub

publish channel message
subscribe channels
unsubscribe channels

持久化

RDB 方式

根据时间和改动的次数存储内存中的快照到磁盘中去

AOF 方式

AOF - Append Only File

appendonly yes

复制

主从方式 master-slave, 通过 TCP 连接将数据从master同步到slave

  • master 可读可写, 自动将数据变化同步给slave
  • slave 只读, 接收master 同步过来的数据

配置方式

vi redis.conf

slaveof master_ip_port

安全

requirepass xxx

通信协议

统一请求协议 unified request protocol

简单协议

工具

  • phpRedisAdmin
    类似于phpMyAdmin

客户端库

列举一些我懂的语言写的客户端库 C/C++, Java, PHP and Node,

Ruby 和 Go 准备今年先入个门

LanguageLibrary
Chiredis
javaJedis
Nodenode_redis
Pythonredis-py
PHPphpredis
Rubyredis-rb
GoRadix

参考

还有两本没看
* Redis 实战
* Redis设计与实现

附录

Java Client Jedis 使用

  • maven configuration
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>    
  • 代码片断
Jedis jedis = null;
try {
  jedis = pool.getResource();
  /// ... do stuff here ... for example
  jedis.set("foo", "bar");
  String foobar = jedis.get("foo");
  jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike"); 
  Set<String> sose = jedis.zrange("sose", 0, -1);
} finally {
  if (jedis != null) {
    jedis.close();
  }
}
/// ... when closing your application:
pool.destroy();

Java 代码 BasicRedisClient

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class BasicRedisClient {
    protected final Logger LOG = LoggerFactory.getLogger(getClass());
    private final JedisPool jedisPool;

    public BasicRedisClient(JedisPool jPool) {
        this.jedisPool = jPool;
    }

    public void setValue(String key, String value, int ttl) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.set(key, value);
            jedis.expire(key, ttl);
        } catch (Exception e) {
            LOG.warn("Failed to set value in redis: ", e.getStackTrace()[0]);
        } finally {
            jedisPool.returnResource(jedis);
        }

    }

    public String getValue(String key) {
        String rValue = null;
        Jedis jedis = jedisPool.getResource();
        try {
            rValue = jedis.get(key);
        } catch (Exception e) {
            LOG.warn("Failed to get value in redis: ", e.getStackTrace()[0]);
        } finally {
            jedisPool.returnResource(jedis);
        }
        return rValue;
    }

    public boolean removeValue(String key) {
        boolean rValue = false;
        Jedis jedis = jedisPool.getResource();
        try {
            rValue = (jedis.del(key) > 0);
        } catch (Exception e) {
            LOG.warn("Failed to remove value in redis: ", e.getStackTrace()[0]);
        } finally {
            jedisPool.returnResource(jedis);
        }
        return rValue;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值