Redis

Catalogue
  1. 1. What is Redis
  2. 2. Why Redis
  3. 3. Application
  4. 4. Redis Install & Config
  5. 5. Redis in Python
    1. 5.1. Install
    2. 5.2. Connection

(参考资料:Redis学习教程Gitbook, RUNOOB Redis 教程)

What is Redis

  • Redis is an opensource(BSDlicensed), in-memory datas tructure store, used as database, cache and message broker.
  • database只是Redis的一个应用, In-memory data structure store
Data Structure Operations
Strings - 字符串 SET, GET, APPEND
Hashes - 哈希表 HSET, HGET
List - 列表 LPUSH, LRANGE, LSET, LTRIM
Set - 集合 SADD, SMEMBERS
Sorted Set ZADD, ZRANGE, ZRANGEBYSCORE

Why Redis

  • Redis 有三个主要的特点, 有别于其它很多竞争对手 :
    • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以 再次加载进行使用
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
    • Redis支持数据的备份,即master-slave模式的数据备份。
  • Redis 优势
    • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
    • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
    • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
    • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Application

  • (1) Cache
    • Replacement - LRU LFU
    • Pre-load
  • (2) Message Broker
    • MQ
  • (3) Database

Redis Install & Config

  • Install Redis with MAC
1
2
3
4
5
6
7
8
9
10
# Install
brew install redis

# Start
brew services start redis
# or redis-server /usr/local/etc/redis.conf

# CMD
~ % redis-cli
127.0.0.1:6379>

Try CMD here : Redis Interactive Online

Redis in Python

The Python interface to the Redis key-value store.

Install

1
sudo pip install redis

Connection

Opening a Connection to Redis Using redis-py

1
2
3
4
5
6
#The following code creates a connection to Redis using redis-py:
import redis
redis_client = redis.Redis(
host = 'hostname',
port = port # redis default port 6379
)

  • redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

  • redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。同理,python的redis没有实现select命令。

1
2
3
4
5
# set, get
r.set('name', 'junxi') # key是"foo" value是"bar" 将键值对存入redis缓存
print(r['name'])
print(r.get('name')) # 取出键name对应的值
print(type(r.get('name')))
Share