Redis简介
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis安装
Windows下载压缩包, 解压即可使用
Ubuntu sudo apt-get install redis-server
Redis启动
服务端 redis-server
客户端 redis-cli
Redis数据类型
- String(字符串)
- 最基本的数据类型,一个key对应一个value,个键最大能存储512MB。
- 二进制安全的,可以包含任何数据。
- Hash(哈希)
- 是一个键值对集合。
- 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
- 个 hash 可以存储 2^32 - 1 个键值对(40多亿)。
- List(列表)
- 是简单的字符串列表,按照插入顺序排序。
- 一个列表最多可以包含 2^32 - 1 个元素。
- Set(集合)
- 是string类型的无序集合。
- 通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
- 最大成员数也是 2^32 - 1。
- zset(sorted set:有序集合)
- zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个double类型的分数,用于对成员进行从小到大的排序。
- zset的成员是唯一的,但分数(score)却可以重复。
Redis命令
Key命令
keys *
查看所有存在的keyskeys <pattern>
查找符合pattern的keysexists <keyname>
检查是否存在del <keyname>
删除指定的keyrename <keyname> <newname>
重命名type <keyname>
查看key的存储类型
String命令
set <key> <value>
设置字符串get <key>
获取字符串getset <key> <value>
获取字符串,同时设置新的字符串getrange <key> start stop
获取指定范围的子字符串mset <key1> <value1> [<key2> <value2> ...]
同时设置多个字符串mget <key1> [<key2> ...]
同时获取多个字符串setnx <key> <value>
当键不存在是设置字符串setrange <key> offset <value>
获取指定偏移量的子字符串strlen <key>
获取字符创长度append <key> <value>
在字符串结尾追加字符串
Hash命令
hset <key> <field> <value>
更改或新增指定字段的值hmset <key> <field1> <value1> [<field2> <value2> ...]
设置hashhkeys <key>
获取指定key的所有字段名hgetall <key>
获取所有字段和值hget <key> <field>
获取指定字段的值hlen <key>
获取字段的个数hexists <key> <field>
检查是否存在某字段hdel <key> <field>
删除指定字段hmset <key> <field1> <value1> [<field2> <value2>...]
List命令
lpush <key> <value1> [<value2>...]
开头插入元素lpop <key>
取出开头元素lindex <key> <index>
获取指定元素llen <key>
列表长度lrange <key> <start> <stop>
获取指定范围的元素lset <key> <index> <value>
设置指定位置的元素值lpushx <key1> <value1> [<key2> <value2>...]
插入多个元素ltrim <key> <start> <stop>
修剪列表rpush ...
结尾插入rpushx ...
结尾插入多个rpop
取出结尾元素
Set命令
sadd <key> <member1> [<member2>...]
添加成员smembers <key>
列出所有成员scard <key>
成员数spop <key>
移除并返回随机一个成员srem <key> <member1>[<member2>...]
移除一个或多个成员sdiff <key1> <key2>
差集sinter <key1> <key2>
交集sunion <key1> <key2>
并集
Sorted Set命令
zadd <key> <score1> <member1> [...]
添加成员zcard <key>
成员数zrange <key> <start> <stop> [withscores]
返回指定区间的成员zrank <key> <member>
返回指定成员的索引zrem <key> <member>[...]
移除成员zscore <key> <member>
返回成员的分数
Python操作Redis
pip install redis
1
2
3
4
5import redis
r = redis.Redis()
r.set('zoro', 'roronoa zoro')
r.get('zoro')
...