Redis教程:https://www.runoob.com/redis/redis-tutorial.html
Redis 命令参考:http://redisdoc.com/#
目录
(6)设置key过期时间 expire key seconds
(3)多次设置 mset key value key value ...
(5)设置字符串保存时间 setex key seconds value
(1)设置单个属性 hset key field value
(3)设置多个属性 hmset key field value field value field value ......
(4)获取多个属性值 hmget key field field field....
(5)删除属性 hdel key field [field ...]
(1)添加 左推 右推 rpush key value [value ...]
(3)插入 linsert key BEFORE|AFTER pivot value 指定位置插入
(1)创建 sadd key member [member ...]
(3)删除 srem key member [member ...]
(3)删除 zrem key member zremrangebyscore key min max
简介
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
各个数据类型应用场景:
| 类型 | 简介 | 特性 | 场景 |
|---|---|---|---|
| String(字符串) | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M | --- |
| Hash(字典) | 键值对集合,即编程语言中的Map类型 | 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) | 存储、读取、修改用户属性 |
| List(列表) | 链表(双向链表) | 增删快,提供了操作某一段元素的API | 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列 |
| Set(集合) | 哈希表实现,元素不重复 | 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
| Sorted Set(有序集合) | 将Set中的元素增加一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行天然排序 | 1、排行榜 2、带权重的消息队列 |
一、数据库操作
1 、切换数据库 select 1
2、删除当前库 flushdb
3、删除所有库 flushall
二、数据操作
- redis是key-value的数据,所以每个数据都是一个键值对
- 键的类型是字符串
-
值的类型分为五种:
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
-
数据操作的全部命令,可以查看中文网站 http://redisdoc.com/
0、键命令
(1)查找键 keys pattern
pattern参数支持正则
key * :查找所有键
(2)key是否存在 exists key key ...
(4)查看键对应的value的类型 type key
(5)删除key del key key ...
(6)设置key过期时间 expire key seconds
- 设置过期时间,以秒为单位
- 创建时没有设置过期时间则一直存在,直到使用使用DEL移除
127.0.0.1:6379> keys *
1) "one"
2) "two"
3) "four"
4) "oone"
5) "three"
6) "otwo"
127.0.0.1:6379> keys o*
1) "one"
2) "oone"
3) "otwo"
127.0.0.1:6379> keys on*
1) "one"
127.0.0.1:6379>
127.0.0.1:6379> exists otwo
(integer) 1
127.0.0.1:6379> type three
string
127.0.0.1:6379> del four
(integer) 1
127.0.0.1:6379> del one two
(integer) 2
1、字符串(string)
- string是redis最基本的类型
- 最大能存储512MB数据
- string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等
(1)单次设置 set key value
(2)单次获取 get key
- 根据键获取值,如果不存在此键则返回null
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set one "1"
OK
127.0.0.1:6379> set two "2"
OK
127.0.0.1:6379> set three "3"
OK
127.0.0.1:6379> keys *
1) "two"
2) "one"
3) "three"
127.0.0.1:6379> get one
"1"
127.0.0.1:6379> get two
"2"
(3)多次设置 mset key value key value ...
(4)多次获取 mget key key key ...
- 根据多个键获取多个值
127.0.0.1:6379> mset one 1 two 2 three 3
OK
127.0.0.1:6379> keys *
1) "two"
2) "one"
3) "three"
127.0.0.1:6379> mget one two three
1) "1"
2) "2"
3) "3"
(5)设置字符串保存时间 setex key seconds value
- 设置键值及过期时间,以秒为单位
127.0.0.1:6379> setex one 5 "abc"
OK
127.0.0.1:6379> get one
"abc"
127.0.0.1:6379> get one
"abc"
127.0.0.1:6379> get one
"abc"
127.0.0.1:6379> get one
(nil)
(6) 追加替换 append key value
127.0.0.1:6379> get two
"2"
127.0.0.1:6379> append two "asd"
(integer) 4
127.0.0.1:6379> get two
"2asd"
127.0.0.1:6379> set two 1
OK
127.0.0.1:6379> get two
"1"
2、哈希(Hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
(1)设置单个属性 hset key field value
(2)获取一个属性值 hget key field
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> hset person age 18
(integer) 1
127.0.0.1:6379> hset person gender true
(integer) 1
127.0.0.1:6379> keys *
1) "person"
127.0.0.1:6379> hget person age
"18"
127.0.0.1:6379> hget person gender
"true"
(3)设置多个属性 hmset key field value field value field value ......
(4)获取多个属性值 hmget key field field field....
127.0.0.1:6379> hmset food name tomato size big price cheap
OK
127.0.0.1:6379> hmget food name size price
1) "tomato"
2) "big"
3) "cheap"
(3)查看属性 hkeys key
(4)查看内容 hvals key
(5)删除属性 hdel key field [field ...]
127.0.0.1:6379> hkeys food
1) "name"
2) "size"
3) "price"
127.0.0.1:6379> hvals food
1) "tomato"
2) "big"
3) "cheap"
127.0.0.1:6379> hdel food name price
(integer) 2
127.0.0.1:6379> hkeys food
1) "size"
3、列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
(1)添加 左推 右推 rpush key value [value ...]
lpush key value [value ...]
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> lpush one 1
(integer) 1
127.0.0.1:6379> lpush one 2
(integer) 2
127.0.0.1:6379> lpush 3 4 5 6
(integer) 3
127.0.0.1:6379> lpush one 3 4 5 6
(integer) 6
127.0.0.1:6379> keys one
1) "one"
127.0.0.1:6379> lrange one 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> rpush two 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> lrange two 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
(2)获取一个 rpop / lpop key
- 移除并且返回 key 对应的 list 的第一个/最后一个元素
lpop / rpop key : 左 / 右获取一个 ,获取后数据弹出,相当于每次删除一个值
127.0.0.1:6379> keys *
1) "two"
2) "3"
3) "one"
127.0.0.1:6379> lpop two
"1"
127.0.0.1:6379> lpop one
"6"
127.0.0.1:6379> lpop one
"5"
127.0.0.1:6379> lpop one
"4"
127.0.0.1:6379> rpop two
"6"
127.0.0.1:6379> rpop two
"5"
127.0.0.1:6379> rpop two
"4"
127.0.0.1:6379> rpop two
"3"
127.0.0.1:6379> rpop two
"2"
127.0.0.1:6379> rpop two
(nil)
127.0.0.1:6379> keys *
1) "3"
2) "one"
127.0.0.1:6379>
(3)获取全部 lrange key start stop
- 返回存储在 key 的列表里指定范围内的元素
- start 和 end 偏移量都是基于0的下标
- 偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
(4)删除 lrem key count value
count=0删除所有符合条件的,
count>0 <0,从头/尾开始删
127.0.0.1:6379> lrange three 0 -1
1) "g"
2) "a"
3) "s"
4) "c"
5) "c"
6) "c"
7) "c"
8) "x"
127.0.0.1:6379> lrem three 0 c
(integer) 4
127.0.0.1:6379> lrange three 0 -1
1) "g"
2) "a"
3) "s"
4) "x"
127.0.0.1:6379> lrem three -1 s
(integer) 1
127.0.0.1:6379> lrem three 1 a
(integer) 1
127.0.0.1:6379> lrange three 0 -1
1) "g"
2) "x"
127.0.0.1:6379> keys *
1) "two"
2) "three"
127.0.0.1:6379> del two
(integer) 1
127.0.0.1:6379> keys *
1) "three"
(3)插入 linsert key BEFORE|AFTER pivot value 指定位置插入
- 在一个元素的前|后插入新元素
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> lpush one 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange one 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> linsert one before 1 "A"
(integer) 5
127.0.0.1:6379> lrange one 0 -1
1) "4"
2) "3"
3) "2"
4) "A"
5) "1"
127.0.0.1:6379> linsert one after 1 "B"
(integer) 6
127.0.0.1:6379> lrange one 0 -1
1) "4"
2) "3"
3) "2"
4) "A"
5) "1"
6) "B"
127.0.0.1:6379>
(4)修改 lset key index value
根据索引,单独修改值
127.0.0.1:6379> lrange two 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lset two 2 "DD"
OK
127.0.0.1:6379> lrange two 0 -1
1) "f"
2) "e"
3) "DD"
4) "c"
5) "b"
6) "a"
4、 集合(Set)
- 无序集合
- 元素为string类型
- 元素具有唯一性,不重复
(1)创建 sadd key member [member ...]
(2)查看 smembers key
- 返回key集合所有的元素
(3)删除 srem key member [member ...]
(4)判断 sismember key member
1、创建集合
127.0.0.1:6379> sadd setone 1 2 3 4
(integer) 4
2、查看集合
127.0.0.1:6379> smembers setone
1) "1"
2) "2"
3) "3"
4) "4"
3、删除集合成员(以值删值)
127.0.0.1:6379> srem setone 1
(integer) 1
127.0.0.1:6379> smembers setone
1) "2"
2) "3"
3) "4"
删多个值
127.0.0.1:6379> srem setone 2 3
(integer) 2
127.0.0.1:6379> smembers setone
1) "4"
4、判断成员是否在集合中,在返回1,不在返回0
127.0.0.1:6379> sismember setone 1
(integer) 0
127.0.0.1:6379> sismember setone 4
(integer) 1
5、有序集合(zset)
- sorted set,有序集合
- 元素为string类型
- 元素具有唯一性,不重复
- 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
- 元素的score可以相同
(1)创建 zadd key score member
score :相当于索引值
(2)查看 zrange key start stop
zrangebyscore key min max
zscore key member
(3)删除 zrem key member zremrangebyscore key min max
(1)创建
127.0.0.1:6379> zadd one 1 a
(integer) 1
127.0.0.1:6379> zadd one 3 b
(integer) 1
127.0.0.1:6379> zadd one 4 c 2 D
(integer) 2
(2)查看
查看全部
127.0.0.1:6379> zrange one 0 -1
1) "a"
2) "D"
3) "b"
4) "c"
127.0.0.1:6379> zrange one 2 4
1) "b"
2) "c"
根据score范围查看
127.0.0.1:6379> zrangebyscore one 2 4
1) "D"
2) "b"
3) "c"
根据score查看
127.0.0.1:6379> zscore one a
"1"
127.0.0.1:6379> zscore one c
"4"
(3)删除
127.0.0.1:6379> zrem one c a
(integer) 2
127.0.0.1:6379> zrange one 0 -1
1) "D"
2) "b"
127.0.0.1:6379> zremrangebyscore one 1 3
(integer) 2
127.0.0.1:6379> zrange one 0 -1
(empty list or set)
三、与python交互
# pip install redis
import redis
# 1.链接数据库 key--value
client = redis.StrictRedis(host='127.0.0.1', port=6379)
# 2.设置key
key = 'pyone'
# 3.string 增加
result = client.set(key, "1")
# 4.删 1, 0
# result = client.delete(key)
# 5.改
result = client.set(key,'2')
# 6.查--bytes
result = client.get(key)
# 查看所有的键
result = client.keys()
print(result)
二、主从服务器
https://www.cnblogs.com/cang12138/p/9132288.html

- 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
- 比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器
- 设置主服务器的配置
bind 192.168.1.10
- 设置从服务器的配置
- 注意:在slaveof后面写主机ip,再写端口,而且端口必须写
bind 192.168.1.11
slaveof 192.168.1.10 6379
- 在master和slave分别执行info命令,查看输出信息
- 在master上写数据
set hello world
- 在slave上读数据
get hello
本文详细介绍Redis数据结构与操作,涵盖字符串、哈希、列表、集合和有序集合的使用方法,以及键管理和数据库操作。同时,文章讲解了Redis与Python的交互方式和主从服务器配置,适合初学者和开发者快速掌握Redis应用。
526

被折叠的 条评论
为什么被折叠?



