Redis基础+Redis 的安装+Redis keys 命令+ Redis数据类型+python连接Redis

一、Redis基础

1.概述

Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。

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

  • Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。
  • 与其它键值数据存储相比,Redis有一组相对丰富的数据类型。
  • Redis可以将数据复制到任意数量的从机中。
2.Redis的优点
  • 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。 #执行速度比较快
  • 支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。 #多种不同的数据类型,支持多种问题的解决
  • 操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。 #支持并发访问
  • 多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。 #在实际项目开发中,多用于缓存
3.Redis与其他键值存储系统
  • Redis是键值数据库系统的不同进化路线,它的值可以包含更复杂的数据类型,可在这些数据类型上定义原子操作。
  • Redis是一个内存数据库,但在磁盘数据库上是持久的,因此它代表了一个不同的权衡,在这种情况下,在不能大于存储器(内存)的数据集的限制下实现非常高的写和读速度。
  • 内存数据库的另一个优点是,它与磁盘上的相同数据结构相比,复杂数据结构在内存中存储表示更容易操作。 因此,Redis可以做很少的内部复杂性。

二、Redis 的安装

第一步:安装Redis,打开终端执行以下命令
sudo apt-get install redis-server

第二步:启动Redis

redis-server

第三步:检查Redis是否正在工作

redis-cli

执行完得到的结果: 127.0.0.1:6379>则说明正常工作

说明:127.0.0.1是计算机的IP地址,6379是运行Redis服务器的端口。

第四步:执行PING命令。

redis 127.0.0.1:6379> ping 
PONG

得到结果为PONG表明Redis已成功安装

注意:在redis的server端,维护着多个数据库(默认为16个)
  所有的数据库以数组的形式保存在redisServer结构中

演示命令:
lichongchong@ubuntu01:~$ sudo apt-get install redis-server
[sudo] lichongchong 的密码: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会同时安装下列软件:
  libjemalloc1 redis-tools
建议安装:
  ruby-redis
下列【新】软件包将被安装:
  libjemalloc1 redis-server redis-tools
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 189 个软件包未被升级。
需要下载 519 kB 的归档。
解压缩后会消耗 1,507 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu xenial/universe amd64 libjemalloc1 amd64 3.6.0-9ubuntu1 [78.9 kB]
获取:2 http://mirrors.aliyun.com/ubuntu xenial-updates/universe amd64 redis-tools amd64 2:3.0.6-1ubuntu0.3 [95.6 kB]
获取:3 http://mirrors.aliyun.com/ubuntu xenial-updates/universe amd64 redis-server amd64 2:3.0.6-1ubuntu0.3 [344 kB]
已下载 519 kB,耗时 0秒 (4,157 kB/s)  
正在选中未选择的软件包 libjemalloc1。
(正在读取数据库 ... 系统当前共安装有 220035 个文件和目录。)
正准备解包 .../libjemalloc1_3.6.0-9ubuntu1_amd64.deb  ...
正在解包 libjemalloc1 (3.6.0-9ubuntu1) ...
正在选中未选择的软件包 redis-tools。
正准备解包 .../redis-tools_2%3a3.0.6-1ubuntu0.3_amd64.deb  ...
正在解包 redis-tools (2:3.0.6-1ubuntu0.3) ...
正在选中未选择的软件包 redis-server。
正准备解包 .../redis-server_2%3a3.0.6-1ubuntu0.3_amd64.deb  ...
正在解包 redis-server (2:3.0.6-1ubuntu0.3) ...
正在处理用于 libc-bin (2.23-0ubuntu10) 的触发器 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在处理用于 systemd (229-4ubuntu21.10) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
正在设置 libjemalloc1 (3.6.0-9ubuntu1) ...
正在设置 redis-tools (2:3.0.6-1ubuntu0.3) ...
正在设置 redis-server (2:3.0.6-1ubuntu0.3) ...
正在处理用于 libc-bin (2.23-0ubuntu10) 的触发器 ...
正在处理用于 systemd (229-4ubuntu21.10) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
lichongchong@ubuntu01:~$ redis-server
4387:C 27 Dec 09:15:32.938 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
4387:M 27 Dec 09:15:32.941 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 4387
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

4387:M 27 Dec 09:15:32.943 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4387:M 27 Dec 09:15:32.943 # Server started, Redis version 3.0.6
4387:M 27 Dec 09:15:32.943 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
4387:M 27 Dec 09:15:32.944 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
4387:M 27 Dec 09:15:32.944 * The server is now ready to accept connections on port 6379
^C4387:signal-handler (1545873371) Received SIGINT scheduling shutdown...
4387:M 27 Dec 09:16:11.796 # User requested shutdown...
4387:M 27 Dec 09:16:11.796 * Saving the final RDB snapshot before exiting.
4387:M 27 Dec 09:16:11.800 * DB saved on disk
4387:M 27 Dec 09:16:11.800 # Redis is now ready to exit, bye bye...
lichongchong@ubuntu01:~$ redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name "xiaoming"
OK
127.0.0.1:6379> set age 10 17
(error) ERR syntax error
127.0.0.1:6379> setex age 10 17
OK
127.0.0.1:6379> mset gender "male" score 90
OK
127.0.0.1:6379> set name "xiaohua"
OK
127.0.0.1:6379> get name
"xiaohua"
127.0.0.1:6379> setnx name "jack"
(integer) 0
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> get gender
"male"
127.0.0.1:6379> get score
"90"
127.0.0.1:6379> mget name score
1) "xiaohua"
2) "90"
127.0.0.1:6379> mget name score gender
1) "xiaohua"
2) "90"
3) "male"
127.0.0.1:6379> get score
"90"
127.0.0.1:6379> incr score
(integer) 91
127.0.0.1:6379> decr score
(integer) 90
127.0.0.1:6379> incrby score 34
(integer) 124
127.0.0.1:6379> decrby score 10
(integer) 114
127.0.0.1:6379> get name
"xiaohua"
127.0.0.1:6379> append name "jack"
(integer) 11
127.0.0.1:6379> get name
"xiaohuajack"
127.0.0.1:6379> strlen name
(integer) 11
127.0.0.1:6379> strlen score
(integer) 3
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> select 0
OK
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set name lisi
OK
127.0.0.1:6379[1]> get name
"lisi"
127.0.0.1:6379[1]> keys
(error) ERR wrong number of arguments for 'keys' command
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> setnx name zhangsan
(integer) 0
127.0.0.1:6379[1]> setex age 10 18
OK
127.0.0.1:6379[1]> setrange emial 3 yangyang@163.com
(integer) 19
127.0.0.1:6379[1]> get emial
"\x00\x00\x00yangyang@163.com"
127.0.0.1:6379[1]> mset name1 李四  name2 张三
OK
127.0.0.1:6379[1]> get name1
"\xe6\x9d\x8e\xe5\x9b\x9b"
127.0.0.1:6379[1]> append name1 123@163.com
(integer) 17
127.0.0.1:6379[1]> get name1
"\xe6\x9d\x8e\xe5\x9b\x9b123@163.com"
127.0.0.1:6379[1]> strlen name1
(integer) 17
127.0.0.1:6379[1]> getrange hellogoodabde  2 6
""
127.0.0.1:6379[1]> set s1 hellogoodabcd
OK
127.0.0.1:6379[1]> getrange s1 2 6
"llogo"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> get name1
(nil)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> 

三、Redis keys 命令

下表给出了与 Redis 键相关的基本命令:

命令及描述序号
DEL key该命令用于在 key 存在时删除 key1
EXISTS key 检查给定 key 是否存在。2
EXPIRE key seconds为给定 key 设置过期时间。3
PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。4
KEYS pattern 查找所有符合给定模式( pattern)的 key 。5
MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。6
PERSIST key 移除 key 的过期时间,key 将持久保持。7
PTTL key 以毫秒为单位返回 key 的剩余的过期时间。8
TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。9
RANDOMKEY 从当前数据库中随机返回一个 key 。10
RENAME key newkey 修改 key 的名称11
TYPE key 返回 key 所储存的值的类型。12

四、数据类型

Redis支持5种数据类型。

1.字符串

下表列出了一些用于在Redis中管理字符串的基本命令。

编号命令描述说明
1SET key value此命令设置指定键的值。
2GET key获取指定键的值。
3GETRANGE key start end获取存储在键上的字符串的子字符串。
4GETSET key value设置键的字符串值并返回其旧值。
5GETBIT key offset返回在键处存储的字符串值中偏移处的位值。
6MGET key1 key2…获取所有给定键的值
7SETBIT key offset value存储在键上的字符串值中设置或清除偏移处的位
8SETEX key seconds value使用键和到期时间来设置值
9SETNX key value设置键的值,仅当键不存在时
10SETRANGE key offset value在指定偏移处开始的键处覆盖字符串的一部分
11STRLEN key获取存储在键中的值的长度
12MSET key value key value …为多个键分别设置它们的值
13MSETNX key value key value …为多个键分别设置它们的值,仅当键不存在时
14PSETEX key milliseconds value设置键的值和到期时间(以毫秒为单位)
15INCR key将键的整数值增加1
16INCRBY key increment将键的整数值按给定的数值增加
17INCRBYFLOAT key increment将键的浮点值按给定的数值增加
18DECR key将键的整数值减1
19DECRBY key decrement按给定数值减少键的整数值
20APPEND key value将指定值附加到键

数据库中,默认在0库中,默认有16个库,数据库:0~15

select num :切换数据库

flushdb:清空数据库

keys * :获取所有的键

setnx key value:防止覆盖掉原来的值

setrange key offset value :得到一个新的字符串,值的长度为offset+value的长度,使用空白符补齐:\x00

getrange key start end :截取一个字符串,操作的是可以,包含start和end

1.1设置
#注意:redis不区分大小写,SET.Set。set表示同一个命令
#字符串最大为512M【缓存】

"""
数据库管理系统-----》数据库-----》表【集合】----》行【文档】
"""

演示命令:
127.0.0.1:6379> set name "xiaoming"
OK
127.0.0.1:6379> setex age 10 17
OK
127.0.0.1:6379> mset gender "male" score 90
OK
127.0.0.1:6379> set name "xiaohua"
OK
127.0.0.1:6379> get name
"xiaohua"
127.0.0.1:6379> setnx name "jack"
(integer) 0
1.2获取
#如果给一个键值对设置了过期时间,到达时间之后,如果通过get获取,得到的结果为nil,相当于null

演示命令:
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> get gender
"male"
127.0.0.1:6379> get score
"90"
127.0.0.1:6379> mget name score
1) "xiaohua"
2) "90"
127.0.0.1:6379> mget name score gender
1) "xiaohua"
2) "90"
3) "male"
1.3运算
#注意:运算的时候值是字符类型的数字【可以转换为数字的字符串】

#score=90-----》score="90"如果给定的值是整型,存储到redis中会被存储为字符串,当进行运算的时候,自动转换为integer进行运算,结果为intger

演示命令:
127.0.0.1:6379> get score
"90"
127.0.0.1:6379> incr score
(integer) 91
127.0.0.1:6379> decr score
(integer) 90
127.0.0.1:6379> incrby score 34
(integer) 124
127.0.0.1:6379> decrby score 10
(integer) 114
1.4其他
#append;表示追加,实际上是字符串的拼接,返回拼接之后字符串的长度
#strlen:获取字符串的长度

演示命令:
127.0.0.1:6379> get name
"xiaohua"
127.0.0.1:6379> append name "jack"
(integer) 11
127.0.0.1:6379> get name
"xiaohuajack"
127.0.0.1:6379> strlen name
(integer) 11
127.0.0.1:6379> strlen score
(integer) 3

练习:

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 1		#选择数据库
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> select 0
OK
127.0.0.1:6379> flushdb   #清空数据库
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set name lisi
OK
127.0.0.1:6379[1]> get name
"lisi"
127.0.0.1:6379[1]> keys *   #获取当前数据库中所有的key
1) "name"
127.0.0.1:6379[1]> setnx name zhangsan
(integer) 0
127.0.0.1:6379[1]> setex age 10 18
OK
127.0.0.1:6379[1]> setrange emial 3 yangyang@163.com
(integer) 19
127.0.0.1:6379[1]> get emial
"\x00\x00\x00yangyang@163.com"
127.0.0.1:6379[1]> mset name1 李四  name2 张三
OK
127.0.0.1:6379[1]> get name1
"\xe6\x9d\x8e\xe5\x9b\x9b"
127.0.0.1:6379[1]> append name1 123@163.com
(integer) 17
127.0.0.1:6379[1]> get name1
"\xe6\x9d\x8e\xe5\x9b\x9b123@163.com"
127.0.0.1:6379[1]> strlen name1
(integer) 17
127.0.0.1:6379[1]> getrange hellogoodabde  2 6
""
127.0.0.1:6379[1]> set s1 hellogoodabcd
OK
127.0.0.1:6379[1]> getrange s1 2 6
"llogo"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> get name1
(nil)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> 
2.哈希

Redis哈希(Hashes)是键值对的集合。Redis哈希是字符串字段和字符串值之间的映射。因此,它们用于存储对象。

序号命令说明
1HDEL key field2 [field2]删除一个或多个哈希字段。
2HEXISTS key field判断是否存在散列字段。
3HGET key field获取存储在指定键的哈希字段的值。
4HGETALL key获取存储在指定键的哈希中的所有字段和值
5HINCRBY key field increment将哈希字段的整数值按给定数字增加
6HINCRBYFLOAT key field increment将哈希字段的浮点值按给定数值增加
7HKEYS key获取哈希中的所有字段
8HLEN key获取散列中的字段数量
9HMGET key field1 [field2]获取所有给定哈希字段的值
10[HMSET key field1 value1 field2 value2 ]为多个哈希字段分别设置它们的值
11HSET key field value设置散列字段的字符串值
12HSETNX key field value仅当字段不存在时,才设置散列字段的值
13HVALS key获取哈希中的所有值
2.1设置
#hset key field value
#说明:key和filed一样,可以自定义,表示用于存储某个对象的基本信息

演示命令:
127.0.0.1:6379> hset ukey name zhangsan
(integer) 1
127.0.0.1:6379> hget ukey name
"zhangsan"
127.0.0.1:6379> hmset ukey username lisi passwd abc123
OK
127.0.0.1:6379> hget ukey username
"lisi"
127.0.0.1:6379> hget ukey passwd
"abc123"
127.0.0.1:6379> hsetnx ukey username xiaohua
(integer) 0
2.2获取
演示命令:
127.0.0.1:6379> hget ukey passwd
"abc123"
127.0.0.1:6379> hmget ukey name username passwd
1) "zhangsan"
2) "lisi"
3) "abc123"
127.0.0.1:6379> hgetall ukey
1) "name"
2) "zhangsan"
3) "username"
4) "lisi"
5) "passwd"
6) "abc123"
2.3其他
#hexists  key  field,如果存在,则返回1.如果不存在,则返回0

演示命令:
127.0.0.1:6379> hkeys ukey
1) "name"
2) "username"
3) "passwd"
127.0.0.1:6379> hvals ukey
1) "zhangsan"
2) "lisi"
3) "abc123"
127.0.0.1:6379> hlen ukey
(integer) 3
127.0.0.1:6379> hexists ukey age
(integer) 0
127.0.0.1:6379> hexists ukey name
(integer) 1
127.0.0.1:6379> 

练习:

127.0.0.1:6379> hset user:001 name lisi
(integer) 1
127.0.0.1:6379> hset user:002 name zhangsan
(integer) 1
127.0.0.1:6379> hset user:001 age 19
(integer) 1
127.0.0.1:6379> hset user:002 age 15
(integer) 1
127.0.0.1:6379> hsetnx user:001 score 80
(integer) 1
127.0.0.1:6379> hsetnx user:001 name abde
(integer) 0
127.0.0.1:6379> hmset user:002 score 78 gender male
OK
127.0.0.1:6379> hget user:001 name
"lisi"
127.0.0.1:6379> hget user:002 name
"zhangsan"
127.0.0.1:6379> hmget user:001 name age score
1) "lisi"
2) "19"
3) "80"
127.0.0.1:6379> hgetall user:001
1) "name"
2) "lisi"
3) "age"
4) "19"
5) "score"
6) "80"
127.0.0.1:6379> hincrby user:001 score 10
(integer) 90
127.0.0.1:6379> hexists user:001 sex
(integer) 0
127.0.0.1:6379> hlen user:002 gender
(error) ERR wrong number of arguments for 'hlen' command
127.0.0.1:6379> hlen user:002
(integer) 4
127.0.0.1:6379> hkeys user:001
1) "name"
2) "age"
3) "score"
127.0.0.1:6379> hkeys user:003
(empty list or set)
127.0.0.1:6379> hvals user:001
1) "lisi"
2) "19"
3) "90"
127.0.0.1:6379> 
3.列表

操作的是链表【栈和队列,插入和删除的特点】

Redis列表只是字符串列表,按插入顺序排序。您可以向Redis列表的头部或尾部添加元素。

列表的最大长度为2^32 - 1个元素(4294967295,每个列表可容纳超过40亿个元素)。

下表列出了与列表相关的一些基本命令。

序号命令说明
1BLPOP key1 [key2 ] timeout删除并获取列表中的第一个元素,或阻塞,直到有一个元素可用
2BRPOP key1 [key2 ] timeout删除并获取列表中的最后一个元素,或阻塞,直到有一个元素可用
3BRPOPLPUSH source destination timeout从列表中弹出值,将其推送到另一个列表并返回它; 或阻塞,直到一个可用
4LINDEX key index通过其索引从列表获取元素
5LINSERT key BEFORE/AFTER pivot value在列表中的另一个元素之前或之后插入元素
6LLEN key获取列表的长度
7LPOP key删除并获取列表中的第一个元素
8LPUSH key value1 [value2]将一个或多个值添加到列表
9LPUSHX key value仅当列表存在时,才向列表添加值
10LRANGE key start stop从列表中获取一系列元素
11LREM key count value从列表中删除元素
12LSET key index value通过索引在列表中设置元素的值
13LTRIM key start stop修剪列表的指定范围
14RPOP key删除并获取列表中的最后一个元素
15RPOPLPUSH source destination删除列表中的最后一个元素,将其附加到另一个列表并返回
16RPUSH key value1 [value2]将一个或多个值附加到列表
17RPUSHX key value仅当列表存在时才将值附加到列表
3.1设置
#1.在头部插入
#2.在尾部插入
#3.在一个指定的元素的前/后插入
#4.设置指定索引的元素值

#注意:索引值可以是负数,表示从列表的尾部开始,其中-1表示最后一个元素

演示命令:
127.0.0.1:6379> lpush alist html
(integer) 1
127.0.0.1:6379> lpush alist python
(integer) 2
127.0.0.1:6379> lpush alist php
(integer) 3
127.0.0.1:6379> lrange alist 0 10
1) "php"
2) "python"
3) "html"
127.0.0.1:6379> lrange alist 0 3
1) "php"
2) "python"
3) "html"
127.0.0.1:6379> rpush alist aaaa
(integer) 4
127.0.0.1:6379> lrange alist 0 10
1) "php"
2) "python"
3) "html"
4) "aaaa"
127.0.0.1:6379> rpush alist bbbb
(integer) 5
127.0.0.1:6379> lrange alist 0 10
1) "php"
2) "python"
3) "html"
4) "aaaa"
5) "bbbb"
127.0.0.1:6379> linsert alist before html cccc
(integer) 6
127.0.0.1:6379> lrange alist 0 10
1) "php"
2) "python"
3) "cccc"
4) "html"
5) "aaaa"
6) "bbbb"
127.0.0.1:6379> linsert alist after html cccc
(integer) 7
127.0.0.1:6379> lrange alist 0 10
1) "php"
2) "python"
3) "cccc"
4) "html"
5) "cccc"
6) "aaaa"
7) "bbbb"
3.2获取
#注意:区别于字符串和哈希,获取的同时移除  pop
#lpop和rpop默认删除第一个和最后一个元素

演示命令:
127.0.0.1:6379> lset alist 3 ddddd
OK
127.0.0.1:6379> lrange alist 0 10
1) "php"
2) "python"
3) "cccc"
4) "ddddd"
5) "cccc"
6) "aaaa"
7) "bbbb"
127.0.0.1:6379> lpop alist
"php"
127.0.0.1:6379> lrange alist 0 10
1) "python"
2) "cccc"
3) "ddddd"
4) "cccc"
5) "aaaa"
6) "bbbb"
127.0.0.1:6379> rpop alist
"bbbb"
127.0.0.1:6379> lrange alist 0 10
1) "python"
2) "cccc"
3) "ddddd"
4) "cccc"
5) "aaaa"
3.3其他
演示命令:
127.0.0.1:6379> ltrim alist 0 2		#截取列表
OK
27.0.0.1:6379> lrange alist 0 10	
1) "python"
2) "cccc"
3) "ddddd"
127.0.0.1:6379> llen alist		#返回列表的长度
(integer) 3
127.0.0.1:6379> lindex alist 2    #返回列表中对应索引的值
"ddddd"
127.0.0.1:6379> 

练习:

127.0.0.1:6379> lpush mylist 'word'
(integer) 1
127.0.0.1:6379> lpush mylist 'hello'
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "word"
127.0.0.1:6379> rpush mylist 'good'
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "word"
3) "good"
127.0.0.1:6379> linsert mylist before 'hello' "this is a tst"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "this is a tst"
2) "hello"
3) "word"
4) "good"
127.0.0.1:6379> linsert mylist after 'hello' "this is a tst"
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "this is a tst"
2) "hello"
3) "this is a tst"
4) "word"
5) "good"
127.0.0.1:6379> lset mylist 1 'this is insert'
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "this is a tst"
2) "this is insert"
3) "this is a tst"
4) "word"
5) "good"
127.0.0.1:6379> lrem mylist 1 'this is a tst'
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "this is insert"
2) "this is a tst"
3) "word"
4) "good"
127.0.0.1:6379> ltrim mylist 1 3
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "this is a tst"
2) "word"
3) "good"
127.0.0.1:6379> lpop mulist
(nil)
127.0.0.1:6379> lpop mylist
"this is a tst"
127.0.0.1:6379> rpop mylist
"good"
127.0.0.1:6379> lrange mylist 0 -1
1) "word"
127.0.0.1:6379> lindex mylist 0
"word"
127.0.0.1:6379> llen mylist
(integer) 1
127.0.0.1:6379> 
4.集合

Redis集合是唯一字符串的无序集合。 唯一值表示集合中不允许键中有重复的数据。

一个集合中的最大成员数量为2^32 - 1(即4294967295,每个集合中元素数量可达40亿个)个。

下表列出了与集合相关的一些基本命令。

序号命令说明
1SADD key member1 [member2]将一个或多个成员添加到集合
2SCARD key获取集合中的成员数
3SDIFF key1 [key2]减去多个集合
4SDIFFSTORE destination key1 [key2]减去多个集并将结果集存储在键中
5SINTER key1 [key2]相交多个集合
6SINTERSTORE destination key1 [key2]交叉多个集合并将结果集存储在键中
7SISMEMBER key member判断确定给定值是否是集合的成员
8SMOVE source destination member将成员从一个集合移动到另一个集合
9SPOP key从集合中删除并返回随机成员
10SRANDMEMBER key [count]从集合中获取一个或多个随机成员
11SREM key member1 [member2]从集合中删除一个或多个成员
12SUNION key1 [key2]添加多个集合
13SUNIONSTORE destination key1 [key2]添加多个集并将结果集存储在键中
14SSCAN key cursor [MATCH pattern] [COUNT count]递增地迭代集合中的元素
4.1设置
#set不允许存在重复元素,如果有元素已经存在,再次添加,则返回0

演示命令:
127.0.0.1:6379> sadd aset python
(integer) 1
127.0.0.1:6379> sadd aset html
(integer) 1
127.0.0.1:6379> sadd aset php
(integer) 1
127.0.0.1:6379> sadd aset js
(integer) 1
127.0.0.1:6379> smembers aset
1) "html"
2) "js"
3) "php"
4) "python"
127.0.0.1:6379> sadd aset html
(integer) 0
127.0.0.1:6379> smembers aset
1) "html"
2) "js"
3) "php"
4) "python"
4.2获取
演示命令:
127.0.0.1:6379> smembers aset   #获取成员
1) "html"
2) "js"
3) "php"
4) "python"
127.0.0.1:6379> scard aset		#获取成员数量
(integer) 4
4.3其他用法
#sismember,判断某个元素在集合中是否存在,如果存在,则返回1,如果不存在则返回0

演示命令:
127.0.0.1:6379> sadd myset html
(integer) 1
127.0.0.1:6379> sadd myset oc
(integer) 1
127.0.0.1:6379> sadd myset ios
(integer) 1
127.0.0.1:6379> sinter aset myset   #交集
1) "html"
127.0.0.1:6379> sdiff aset myset   #差集
1) "js"
2) "python"
3) "php"
127.0.0.1:6379> sdiff myset aset
1) "oc"
2) "ios"
127.0.0.1:6379> sismember aset mysql		#判断是否是集合成员
(integer) 0
127.0.0.1:6379> sismember aset python
(integer) 1
127.0.0.1:6379> 
5.有序集合

做了排序,有序集合【sorted set】

下表列出了 redis 有序集合的基本命令:

序号命令及描述
1ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员,或者更新已存在成员的分数
2ZCARD key 获取有序集合的成员数
3ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
4ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
5ZINTERSTORE destination numkeys key [key …] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
6ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量
7[ZRANGE key start stop [WITHSCORES]通过索引区间返回有序集合成指定区间内的成员
8ZRANGEBYLEX key min max [LIMIT offset count]通过字典区间返回有序集合的成员
9ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]通过分数返回有序集合指定区间内的成员
10ZRANK key member 返回有序集合中指定成员的索引
11ZREM key member member…移除有序集合中的一个或多个成员
12ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员
13ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员
14ZREMRANGEBYSCORE key min max移除有序集合中给定的分数区间的所有成员
15ZREVRANGE key start stop [WITHSCORES]返回有序集中指定区间内的成员,通过索引,分数从高到底
16ZREVRANGEBYSCORE key max min [WITHSCORES]返回有序集中指定分数区间内的成员,分数从高到低排序
17ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18ZSCORE key member 返回有序集中,成员的分数值
19ZUNIONSTORE destination numkeys key [key …]计算给定的一个或多个有序集的并集,并存储在新的 key 中
20ZSCAN key cursor [MATCH pattern] [COUNT count]迭代有序集合中的元素(包括元素成员和元素分值
演示命令:
127.0.0.1:6379> zadd myzset 1 "one"
(integer) 1
127.0.0.1:6379> zadd myzset 2 "one"
(integer) 0
127.0.0.1:6379> zadd myzset 2 "two"
(integer) 1
127.0.0.1:6379> zadd myzset 3 "three"
(integer) 1
127.0.0.1:6379> zrem myzset two
(integer) 1
6.其他命令
演示命令:
127.0.0.1:6379> keys *
1) "myset"
2) "ukey"
3) "mylist"
4) "user:001"
5) "aset"
6) "user:002"
7) "alist"
8) "myzset"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> exists user:001
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> exists user:003
(integer) 0
127.0.0.1:6379> del name
(integer) 0
127.0.0.1:6379> move age 1
(integer) 0
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> quit
lichongchong@ubuntu01:~$ 

五、Redis与 python 交互

执行命令:pip3 install redis

演示命令:
lichongchong@ubuntu01:~$ pip3 install redis
Collecting redis
  Downloading https://files.pythonhosted.org/packages/f5/00/5253aff5e747faf10d8ceb35fb5569b848cde2fdc13685d42fcf63118bbc/redis-3.0.1-py2.py3-none-any.whl (61kB)
    100% |████████████████████████████████| 71kB 207kB/s 
Installing collected packages: redis
Could not install packages due to an EnvironmentError: [Errno 13] 权限不够: '/usr/local/lib/python3.5/dist-packages/redis-3.0.1.dist-info'
Consider using the `--user` option or check the permissions.

lichongchong@ubuntu01:~$ sudo !!
sudo pip3 install redis
[sudo] lichongchong 的密码: 
The directory '/home/lichongchong/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/lichongchong/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting redis
  Downloading https://files.pythonhosted.org/packages/f5/00/5253aff5e747faf10d8ceb35fb5569b848cde2fdc13685d42fcf63118bbc/redis-3.0.1-py2.py3-none-any.whl (61kB)
    100% |████████████████████████████████| 71kB 196kB/s 
Installing collected packages: redis
Successfully installed redis-3.0.1

引入模块

from redis import *

这个模块中提供了StrictRedis对象(Strict严格),用于连接redis服务器,并按照不同类型提供 了不同方法,进行交互操作

StrictRedis对象方法:

通过init创建对象,指定参数host、port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0
sr = StrictRedis(host=‘localhost’, port=6379, db=0)

代码演示:

from redis import *


#1.增
#1.1创建对象,和redis服务器进行连接
sr = StrictRedis(host="localhost",port=6379,db=0)


#1.2添加键值对    set key value
r1 = sr.set("name","zhangsan")

#1.3输出结果,返回true则表示添加成功,false则添加失败
print(r1)


#2.改
#r2 = sr.set("name","lisi")

#3.删
#r3 = sr.delete("name")


#4.查
#如果key存在,则返回对应的value,如果不存在,则返回None
r4 = sr.get("age")
print(r4)

#5.获取键
#返回一个列表
r5 = sr.keys()

print(r5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值