Redis快速入门

栏目: 数据库 · 发布时间: 6年前

内容简介:Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,如Java, Python, PHP等。

Redis简介

Redis快速入门

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,如Java, Python, PHP等。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String) , 哈希(Hash) , 列表(List) , 集合(Set)有序集合(Sorted Set) 等类型。

Redis有三个主要特点,使它优越于其它键值数据存储系统:

  • Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化;
  • 与其它键值数据存储相比,Redis有一组相对丰富的数据类型;
  • Redis可以将数据复制到任意数量的从机(slave)中。

关于 Redis 的安装与配置,可以参考网址: http://www.redis.net.cn/tutor... ,本文将不再过多介绍。

Redis的基本数据结构

Redis的基本数据结构有:

  • String: 字符串
  • Hash: 哈希(字典)
  • List: 列表
  • Set: 集合
  • Sorted Set: 有序集合

以下,将针对这5中基本数据结构进行简单介绍。

String: 字符串

redis 字符串数据类型的相关命令用于管理 redis字符串值。

127.0.0.1:6379> set testkey China
OK
127.0.0.1:6379> get testkey
"China"
127.0.0.1:6379> mset testkey1 USA testkey2 UK testkey3 GER
OK
127.0.0.1:6379> mget testkey1 testkey2 testkey3
1) "USA"
2) "UK"
3) "GER"
127.0.0.1:6379> del testkey3
(integer) 1
127.0.0.1:6379> get testkey3
(nil)

set和get命令分别为设置和获取String的值,mset和mget命令分别为设置和获取多个String的值,del命令为删除String的值。

Redis快速入门

更多关于String的操作可参考网址: http://www.redis.net.cn/tutor...

Hash: 哈希(字典)

redis中的Hash是一个string类型的key和value的映射表,hash特别适合用于存储对象。

redis中每个Hash可以存储 $2^{32}-1$个键值对(40多亿)。

127.0.0.1:6379> hset company1 name "baidu"
(integer) 1
127.0.0.1:6379> hget company1 name
"baidu"
127.0.0.1:6379> hmset company2 name "google" country "USA" type "tech corp"
OK
127.0.0.1:6379> hgetall company2
1) "name"
2) "google"
3) "country"
4) "USA"
5) "type"
6) "tech corp"
127.0.0.1:6379> hdel company1 name
(integer) 1

hset和hget命令分别为设置和获取某个key的键值对(field-value),hmset和hmget命令分别为设置和获取某个key的多个键值对,hgetall命令为获取某个key的全部键值对,hdel命令为删除某个key的键值对。

Redis快速入门

更多关于Hash的命令可参考网址: http://www.redis.net.cn/tutor...

List: 列表

redis中的List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含$2^{32}-1$个元素。

127.0.0.1:6379> rpush databases mysql sql_server oracle mongodb redis hbase
(integer) 6
127.0.0.1:6379> lrange databases 0 4
1) "mysql"
2) "sql_server"
3) "oracle"
4) "mongodb"
5) "redis"
127.0.0.1:6379> lrem databases 0 sql_server
(integer) 1
127.0.0.1:6379> lrange databases 0 4
1) "mysql"
2) "oracle"
3) "mongodb"
4) "redis"
5) "hbase"

rpush命令为从List的右端(末尾)添加一个或多个元素,lrange命令为显示List的下标从start到end的元素,lrem命令为删除某个元素(count=0表示删除所有与该元素相等的元素)。

Redis快速入门

更多关于List的命令可以参考网址: http://www.redis.net.cn/tutor...

Set: 集合

redis中的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

redis中的Set是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为$2^{32}-1$。

127.0.0.1:6379> sadd fruit apple banana orange apple pear
(integer) 4
127.0.0.1:6379> scard fruit
(integer) 4
127.0.0.1:6379> smembers fruit
1) "orange"
2) "pear"
3) "banana"
4) "apple"
127.0.0.1:6379> srem fruit pear
(integer) 1
127.0.0.1:6379> smembers fruit
1) "orange"
2) "banana"
3) "apple"
127.0.0.1:6379> scard fruit
(integer) 3

sadd命令为在集合中添加元素,scard命令为统计该集合元素个数,smembers命令为显示该集合中的所有元素,srem命令为删除该集合中的某个元素。

Redis快速入门

更多关于Set的命令可以参考网址: http://www.redis.net.cn/tutor...

Sorted Set: 有序集合

redis中的Sorted Set和Set一样也是string类型元素的集合,且不允许重复的成员。

不同的是Sorted Set中的每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

127.0.0.1:6379> zadd databases 1 redis
(integer) 1
127.0.0.1:6379> zadd databases 2 mongodb
(integer) 1
127.0.0.1:6379> zadd databases 3 mysql
(integer) 1
127.0.0.1:6379> zadd databases 3 mysql
(integer) 0
127.0.0.1:6379> zadd databases 4 mysql
(integer) 0
127.0.0.1:6379> zadd databases 5 oracle
(integer) 1
127.0.0.1:6379> zcard databases
(integer) 4
127.0.0.1:6379> zrange databases 0 4 withscores
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
127.0.0.1:6379> zrangebyscore databases 0 4 withscores
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

zadd命令为在有序集合中添加元素(元素需要带有分数score),zcard命令为统计该有序集合中的元素个数,zrange命令为显示该有序集合下标从start到end的元素,zrangebyscore为显示该有序集合分数从start到end的元素。

Redis快速入门

更多关于Sorted Set的命令可以参考网址 http://www.redis.net.cn/tutor...

Python使用

Python 中操作Redis,需要安装第三方模块redis。

示例代码如下,以操作redis中的Hash为例(默认端口号为6379):

import redis

r = redis.Redis(host='localhost', port=6379, db=0)

# 设置employee1的键值对
r.hset('employee1', 'name', 'Jc')
r.hset('employee1', 'age', 25)
r.hset('employee1', 'city', 'Shanghai')

# 设置employee2的键值对
r.hset('employee2', 'name', 'Alex')
r.hset('employee2', 'age', 26)
r.hset('employee2', 'city', 'New York')

# 查询empolyee1, employee2的信息
print(r.hget('employee1', 'name'))
print(r.hgetall('employee1'))
print(r.hget('employee2', 'name'))
print(r.hgetall('employee2'))

输出结果:

b'Jc'
{b'name': b'Jc', b'age': b'25', b'city': b'Shanghai'}
b'Alex'
{b'name': b'Alex', b'age': b'26', b'city': b'New York'}

Java使用

Java操作Redis的API为Jedis, maven仓库地址为: https://mvnrepository.com/artifact/redis.clients/jedis

示例代码如下,以操作redis中的Hash为例(默认端口号为6379):

import redis.clients.jedis.Jedis;

public class JedisTest {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost", 6379);
        System.out.println("连接成功");

        // 设置employee1的键值对
        jedis.hset("employee1", "name", "Jc");
        jedis.hset("employee1", "age", "25");
        jedis.hset("employee1", "city", "Shanghai");

        // 设置employee2的键值对
        jedis.hset("employee2", "name", "Alex");
        jedis.hset("employee2", "age", "26");
        jedis.hset("employee2", "city", "New York");

        // 获取存储的数据并输出
        System.out.println("employee1的姓名为: "+ jedis.hget("employee1", "name"));
        System.out.println("employee1的全部信息为: "+ jedis.hgetAll("employee1"));
        System.out.println("employee2的姓名为: "+ jedis.hget("employee2", "name"));
        System.out.println("employee2的全部信息为: "+ jedis.hgetAll("employee2"));
    }
}

输出:

连接成功
employee1的姓名为: Jc
employee1的全部信息为: {name=Jc, city=Shanghai, age=25}
employee2的姓名为: Alex
employee2的全部信息为: {name=Alex, city=New York, age=26}

总结

本次分享到此结束,感谢大家阅读~

注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~


以上所述就是小编给大家介绍的《Redis快速入门》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

On LISP

On LISP

Paul Graham / Prentice Hall / 09 September, 1993 / $52.00

On Lisp is a comprehensive study of advanced Lisp techniques, with bottom-up programming as the unifying theme. It gives the first complete description of macros and macro applications. The book also ......一起来看看 《On LISP》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具