一、Redis数据库
1、redis 是一个开源的使用 ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化(周期性的把内存中的数据写入到硬盘中,重启的时候再次加载进行使用)的日志型、Kye - Value数据库
2、redis 也被称为数据结构服务器,因为它的 value 可以是字符串、哈希、列表、集合、有序集合等类型
3、redis 支持数据的备份,即 master-slave 模式的数据备份
4、基本的数据结构:
string:字符串 list:列表 hash:散列
set:集合 sorted set(zset):有序集合
5、redis 连接
本地连接: redis -cli
远程连接linux: redis -cli 主机地址 -p 6379
二、 redis数据类型——string字符串
1、设置 key - value (key 的命名规范:不允许出现空格和 \n ( 换行 ),其余大部分字符都可以使用)
设置键值:set key value
一次设置多个键值:mset key1 value1 key2 value2 ...... (键值之间,使用空格隔开)
获取键值:get key
一次获得多个 key 的值:mget key1 key2 key3 (key 与 key 之间使用空格隔开)
2、incr、decr
incr 做自增操作,可以对某个 key 的 value 进行 +1操作
decr 做自减操作,可以对某个 key 的 value 进行 -1操作
3、incrby、decrby :指定增加 / 减少的数值
4、keys * 获取 redis 中所有的key
5、mysql 数据在 redis 中的存储格式
Mysql数据表使用行和列的组合储存数据,以【it_user】表为例
| id | usename | |
| 1 | asion | [email protected] |
| 2 | makr | [email protected] |
①如果需要把上面的 mysql 的数据存储到 redis 里面,存储的 key 如何命名,一般需要分如下几步来操作:
a:将 mysql 的表名作为 redis 的 key 的第一部分 (it_user)
b:将 mysql 的表的主键名放在上面的前缀之后,作为 key 的第二部分,使用冒号分隔(it_user:id)
c:对应记录的主键值作为 key 的第三部分(it_user:id:1 )
d:将 mysql 里面的其他的字段作为 key 的第四部分(it_user:id:1 :username)
②把上面 mysql 表里面的记录保存在 redis:
⑴ 存储第一条数据:
⑵ 存储第二条数据:
⑶ 最终在 redis 中的储存如下:
③获取刚刚储存的信息
6、exists key 判断指定键是否存在,存在返回1,不存在返回 0
‘
7、type key 返回指定键的数值类型
8、del key1 key2 key3 删除指定键,可以删除一个也可以删除多个,键与键之间用空格隔开
9、rename key newkey 重命名
10、dbsize 返回当前数据库中 key 的数量
11、expire key seconds 为 key 指定过期时间,单位为 s,当 key 过期后,会被自动删除
ttl key 返回 key 的剩余过期时间
如图:创建一个 color 键,指定它的过期时间为10s,10s后自动删除, - 2表示已过期 2s,此时 color 键已经被删除
12、 select index 切换数据库,redis 共有16个数据库,索引值为 0 - 15,默认使用 db-0 数据库,超出会报错
13、move key index 将 key 从当前数据库移动到指定数据库
14、 flushdb 删除当前数据库中所有的 key
flushall 删除所有数据库中所有的 key
15、append key value 给指定的 key 追加 value(原 value 会被保留)
16、substr key start end 对指定的 key 值进行截取,返回截取过的 value (对 key - value 没有影响)
三、 redis数据类型——list列表类型
1、list 类型其实就是一个双向链表,通过 push,pop 操作,从链表的头部或者尾部添加或删除元素,这使得 list 既可以用作栈,也可以用作队列
2、lpush 、rpush 、lrange
lpush key value :向链表的头部放入数据 rpush key value :向链表的尾部放入数据
lrange key start stop :获取列表的信息, 0 -1 表示获取该 list 的全部信息
3、lpop 、rpop
lpop key :在链表的左侧弹出第一个数据(弹出链表的头部数据)
rpop key :在链表的右侧弹出最后一个数据(弹出链表的尾部数据)
、
4、llen key :返回 key 对应的 list 的长度,若 key 不存在则返回 0,若 key 对应的数据类型不是 list 返回错误
5、ltrim key start stop :截取 list ,保留指定区间内的元素,其余元素删除
四、redis数据类型——set集合类型
1、redis 里面的 set 集合类型是 string 类型的无序集合,被称为无序集合类型
2、集合的三个特点:无序性、唯一性、确定性
3、sadd key member :添加一个 string 元素到 key 对应的 set 集合中,若添加成功则返回 1,若该元素已存在,则添加失败,返回 0
4、smembers key :获取集合里面的元素
5、srem key member :移除集合中的某个元素,移除成功返回 1
6、spop key :随机移除集合中的某个元素,并返回删除的元素
7、sismember key member: 判断元素是否存在集合中,存在返回 1,不存在返回 0
8、scard key :返回集合中元素个数
9、smove key1 key2 member:将集合1中的指定元素移除给集合2,成功则返回 1
10、集合运算:
sinter key1 key 2 求交集
sunion key1 key2 求并集
sdiff key1 key2 求差集
11、实例应用: redis 里面的集合一般用于社交类型的网站的好友关系展示,如:好友推荐,显示共同好友等
①首先设置四个用户:aaa、bbb、ccc、ddd 以及他们的邮箱信息
②设置好友集合: 设定 03 号与 01、02 号为好友,04 号与 02 号为好友
③求出好友关系:
求 03 号与 04 号的共同好友(交集):
求 03 号 与 04 号的全部好友(并集):
通过 03 号向 04 号推荐好友(差集):
五、redis数据类型——zset集合类型(sorted set)
1、与 set 一样,zset 也是 string 类型元素的集合,不同的是,set 集合中的元素是无序的,而在 zset 集合中,每个元素都会关联一个权,通过权值可以有序的获取集合中的元素,所以 zset 被称为有序集合
2、可以利用 zset 的特点,根据回复量,获取热门信息
3、zadd key 权 member :向集合中添加元素,并设置权重
4、zrange key start stop :返回指定区间的元素,按照权重,升序排列
5、zrevrange key start stop :返回指定区间的元素,按照权重,降序排列
6、zremrangebyrank key start stop : 删除指定区间的元素(按权值大小升序排列,然后删除指定区间的元素)
7、zrank key member :返回指定元素在集合中的索引值,集合中元素按照权重,升序排列
将上一步操作删除的元素添加上,并重新赋予权值
8、zrevrank key member :返回指定元素在集合中的索引值,集合中的元素按照权重,降序排列
9、zcard key :返回集合中的元素个数
10、zscore key member : 返回指定元素的权重值
11、zrange key start stop withscores :返回指定区间的元素以及他们的权重值
12、zincrby key increment member :按照 increment 幅度,增加对应的 member 的权值,并返回增加后的新权值
13、zrem key member :删除指定元素,删除成功返回 1,删除失败(元素不存在)返回 0
六、redis数据类型——hash类型
1、redis 里面的 hash 是一个 string 类型的 field 和 value 的映射表,特别适合用于存储对象
储存格式类似于: key = array ( " field " => " value " )
2、hset key field value :设置单个值
hget key field :获取单个值
3、hmset key field1 value1 field2 value2 ....... :设置多个值,使用空格隔开
hgetall key :获取 key 中全部的 hash 数据
hmget key field1 field2 ..... :获取多个值
4、hkeys key :获取 key 中全部的 field
5、hvals key :获取 key 中全部的 value
6、hlen key :获取 kes 中 field 的数量
7、hdel key field :删除指定的 field,对应的 value 也会被删除,删除成功返回 1
8、hexists key field :判断 key 对应的 field 是否存在,存在返回 1 ,不存在返回 0
9、hincrby key field increment :给指定的字段的整数值,加上增量 increment,若指定增加的字段不是整数型,会报错
七、python 与 redis 交互
运行结果: