Redis入门指南之一(入门)

本节主要介绍Redis的5种数据类型,同时使用来Python API来操作Redis。

API使用:

redis-py 的API的使用可以分类为:

(1)连接方式

(2)连接池

(3)操作

  • String 操作
  • Hash 操作
  • List 操作
  • Set 操作
  • Sort Set 操作

(4)管道

(5)发布订阅

1. redis文件配置

(1)配置redis配置文件

    在之前的博客https://www.cnblogs.com/xuejiale/p/10424885.html中安装并配置了redis,为了能够使用python操作redis,还需要再次配置redis的配置文件/etc/redis/6379.conf。

  • 找到bind 127.0.0.1这一行,修改为bind 0.0.0.0

  •  把protected-mode yes改为no

  • 找到daemonize,可以看到reids默认情况下不是后台驻留程序,(将daemonize属性改为yes,表明需要在后台运行,这个根据你个人情况来搞,如果选择后台驻留,建议设一个密码)

 

(2)启动redis服务端

    使用指定配置文件的方式启动

[root@centos redis]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@centos redis]# /etc/init.d/redis_6379 start
Starting Redis server...
7759:C 02 Mar 15:48:23.397 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7759:C 02 Mar 15:48:23.398 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=7759, just started
7759:C 02 Mar 15:48:23.398 # Configuration loaded
[root@centos redis]# redis-cli
测试是否可以连接redis:
127.0.0.1:6379> PING
PONG
127.0.0.1:6379>

(3)其他操作

     在Python中运行时有时候会报相关错误,要把防火墙关掉

暂时关闭防火墙:(立即生效,开机重启,会重新打开) 
service iptables stop 
永久关闭防火墙(关机重启才会生效) 
chkconfig iptables off

(3)redis设置密码

  • 在配置文件中设置

          在配置文件中找到requirepass foobared行,打开注释并设置密码为redis123,requirepass redis123,保存退出并重启redis:

重启之后连接redis,并测试需要输入密码:

[root@centos redis]# redis-cli
127.0.0.1:6379> SET name lisi
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH redis123
OK
127.0.0.1:6379> SET name lisi
OK
  • 在客户端设置

          开两个窗口,在一个窗口设置,如下

127.0.0.1:6379> config set requirepass newredis123
OK

          在另一个窗口登录:

[root@centos redis]# redis-cli
127.0.0.1:6379> SET name wangwu
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH newredis123
OK
127.0.0.1:6379> SET name wangwu
OK
127.0.0.1:6379>

(4)python redis API安装与运行redis

         首先要安装python 操作redis的API接口模块:

sudo pip install redis
or
sudo easy_install redis
or
源码安装
 
详见:https://github.com/WoLpH/redis-py

         为了方便测试,目前及后续我们不设置redis的密码,使用Windows连接Linux上安装的redis,测试程序如下:

1 import redis
2  
3 r = redis.Redis(host='192.168.30.134', port=6379)
4 r.set('foo', 'Bar')
5 print(r.get('foo'))
python操作redis

执行结果:

2. 连接方式

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

    默认情况下,往redis里插入数据后再读出来时所有键与值都是byte类型的,就是说如果你要使用这些值全部都得转换编码。为了读出的数据是string类型,有一个参数decode_responses可以设置,改参数默认为False,连接redis,加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。例如:

1 import redis
2  
3 r = redis.Redis(host='192.168.30.134', port=6379)
4 #r = redis.StrictRedis(host=db_host, port=db_port, password=db_password, decode_responses=True)
5 r.set('subject', 'python')
6 
7 print(r['subject'])  # 如果subject不存在则会报错
8 print(r.get('subject')) # 如果subject不存在则会返回None
9 print(type(r.get('subject')))
无参数decode_responses参数

执行结果:

1 import redis
2  
3 r = redis.Redis(host='192.168.30.134', port=6379, decode_responses=True)
4 #r = redis.StrictRedis(host=db_host, port=db_port, password=db_password, decode_responses=True)
5 r.set('subject', 'Go')
6 
7 print(r['subject'])  # 如果subject不存在则会报错
8 print(r.get('subject')) # 如果subject不存在则会返回None
9 print(type(r.get('subject')))
有参数decode_responses参数

 执行结果:

注意:如果你设置decode_responses=True,在往数据库里真的写二进制数据的时候,那么再读取的时候就会出错。除非你明确可以知道你没有使用二进制value。

3. 连接池

      redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

2. 热身

     首先了解几个基础命令,打开redis-cli

     (1)获得符合规则的键名列表

KEYS pattern

       可以通过help COMMAND来获取该命令的使用信息。比如:

127.0.0.1:6379> help KEYS

  KEYS pattern
  summary: Find all keys matching the given pattern
  since: 1.0.0
  group: generic

        pattern支持glob风格通配符格式,具体规则如下:

     使用KEYS *能够获的Redis中所有的键,如

127.0.0.1:6379> KEYS *
1) "num"
2) "key"
3) "foo"
4) "bar"
5) "name"

注意:KEYS命令需要遍历Redis中所有的键,当键的数量较多时会影响性能,不建议在生产环境中使用。

提示:Redis不区分命令大小写,但习惯于使用大写字母表示Redis命令。

     (2)判断一个键是否存在

EXISTS key [key ...]
  summary: Determine if a key exists

       如果键存在则返回整数类型1,否则返回0。

127.0.0.1:6379> EXISTS foo
(integer) 1
127.0.0.1:6379> EXISTS noexists
(integer) 0

     (3)删除键

  DEL key [key ...]
  summary: Delete a key

         可以删除一个或者多个键,返回值是删除的键的个数。如:

127.0.0.1:6379> DEL foo
(integer) 1
127.0.0.1:6379> DEL foo
(integer) 0

          第二次执行 DEL 命令时因为 bar 键已经删除了,实际上并没有删除任何键,所以返回0。

技巧: DEL命令的参数不支持通配符,但是可以结合Linux的管道和xargs命令自行实现删除所有符合规则的键。比如要删除所有以“user:”开头的键,就可以执行redis-cli KEYS "user:*" | xargs redis-cli DEL。另外由于DEL命令支持多个键作为参数,所以还可以执行redis-cli DEL `redis-cli KEYS "user:"`来达到同样的效果,但是性能更好。

     (4)获得键值的数据类型

TYPE key
  summary: Determine the type stored at key

         TYPE命令用来获得键值的数据类型,返回值可能是string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型)。例如:

127.0.0.1:6379> SET foo 1
OK
127.0.0.1:6379> TYPE foo
string
127.0.0.1:6379> LPUSH bar 1
(integer) 1
127.0.0.1:6379> TYPE bar
list
127.0.0.1:6379>

3. 字符串类型

      String操作,redis中的String在在内存中按照一个name对应一个value来存储。字符串类型是Redis中基本的数据类型,他能存储任何形式的字符串,包括二进制数据。你可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。一个字符串类型的键允许存储的最大容量是512M。

   (1)赋值与取值

  SET key value [EX seconds] [PX milliseconds] [NX|XX]
  summary: Set the string value of a key

参考文献:

  • Redis入门指南 (第二版)
  •  https://www.cnblogs.com/LearningOnline/p/9456806.html (linux上部署redis实现与Python上的redis交互)

猜你喜欢

转载自www.cnblogs.com/xuejiale/p/10460468.html