一、Redis常用数据类型
-
字符串类型
String类型最大可以存储512M数据
语法结构:
添加:SET key value
SETEX key 5 value 设置5秒后过期(消失)
PSETEX key 5 value 设置5毫秒后过期
MSET key value key value 设置多个值
APPEND key value 在字符串后追加值
获取:GET key
GETRANGE key 0 1 截取字符串内容
STRLEN key 获取字符串长度
GET key key 获取多个值
删除:DEL email
修改:INCR num 数字自增1
INCRBY num 25 数字增加25
INCRBYFLOAT num 3.5 数字增加浮点数3.5
DECR num 数字自减1
DECRBY num 25 数字减少25
浮点数没有减少,可以增加负的浮点数
-
哈希类型
当我们觉得VALUE需要保存更复杂的结构化数据,这时候可以使用哈希类型语法结构:
添加:HSET 8000 key value
HMSET 8000 key value key value 设置多个字段
获取:HGET 8000 key 获取字段
HMGET 8000 key key key 获取多个字段
HGETALL 8000 获取所有字段值
HKEYS 8000 获取所有字段名
HLEN 8000 获取字段数量
HEXISTS 8000 key 判断是否存在这个字段
HVALS 8000 获取所有字段值
删除:HDEL 8000 key value
修改:HINCRBY 8000 key 10 让这个字段值加上指定的整数
HINCRBYFLOAT 8000 key 3.5 让这个字段值加上指定的浮点数
-
列表类型
当我们需要向VALUE保存序列化的数据,可以使用列表类型:
添加:RPUSH key value value value 表的右侧追加
LPUSH key value value 表的左侧追加
LINSERT key BEFORE/AFTER value1 value2 在value1的前/后插入value2
获取:LRANGE key 0 -1 输出所有元素,-1表示表的末尾
LLEN key 获得表的长度
LINDEX key index 获得表的元素
删除:LPOP key 删除表的最左边的元素
RPOP key 删除表的最右边的元素
LREM key 2 value 删除表中2个value值
修改:LSET key index value 根据索引序号修改值
-
集合类型
添加:SADD key value value
获取:SMEMBERS key 获得集合所有元素
SCARD key 获得集合长度
SISMEMBER key value 判断是否含有某个元素
SRANDMEMBER key 3 随机返回3个集合中的元素
删除:SREM key value value
SPOP key 随机删除并返回集合的某个元素
-
有序集合类型
有序集合是带有排序功能的集合,Redis会按照元素分数值排序
分数值一致时,数据排序顺序按照哈希算法排序
元素值必须用双引号包裹
添加:ZADD key 0 "value" 0 "value" 添加数据,0是分数值
获取:ZREVRANGE key 0 -1 获得有序集合的降序结果
ZRANGE key 0 -1 获得有序集合的升序结果
ZCARD key 获得有序集合长度
ZCOUNT key 5 10 获得分数值在5~10之间的元素数量,两个值都包括
ZSCORE key "value" 获得元素的分数值
ZRANGEBYSCORE key 5 10 获得分数值在5~10之间的升序元素结果,两个值都包括
ZRANGEBYSCORE key 5 (10 获得分数值在5~10之间的升序元素结果,不包括10
ZRANGEBYSCORE key -inf +inf 获得负无穷到正无穷的升序元素结果。
ZREVRANGEBYSCORE key 10 5 获得分数值在5~10之间的降序元素结果。
ZRANK key "value" 获得这个元素的升序排名,从0开始
ZREVRANK key "value" 获得这个元素的降序排名,从0开始
删除:ZREM key "value" , "value"
ZREMRANGEBYRANK key 0 2 删除排名区间内的元素,按照排名删除
ZREMRANGEBYSCORE key -inf (5000 删除分数值区间内的元素
修改:ZINCRBY key 5 "value" 对分数值进行加法+=运算
二、操作key的常用指令
- 库切换:SELECT 1
- 删除记录:DEL keyword
- 判断是否存在某个key:EXISTS employee
- 设置记录过期时间:EXPIRE employee 5
- 设置记录的过期时间(UNIX时间戳):EXPIREAT employee 1722141530
- 把记录迁移到其他逻辑库:MOVE keyword 1
- 修改Key名称:RENAME employee emp
- 移除过期时间:PERSIST emp
- 判断VALUE数据类型:TYPE emp
三、Redis事务
Redis是异步单线程执行,也就是一个线程对应所有的客户端。哪个客户端上传了命令,线程就会执行,所以并 不能保证一个客户端的多个命令,不会被其他客户端的命令插队
跟MySQL有一些区别,它满足MySQL特性中的一致性,隔离性,不满足MySQL的原子性,持久性。
为了保证事务的一致性,在开启事务之前必须要用WATCH命令监视要操作的记录。
监视目标被其他线程修改,则自动关闭:WATCH key key
开启事务:
MULTI
INCR kill_num
RPUSH kill_user 9502
EXEC
取消事务:DISCARD 取消事务
关于Redis的所有命令可以在官网中找到Redis 命令参考
http://doc.redisfans.com/index.html
四、Redis与Python的交互
在pycharm控制台中安装模块,输入:pip3 install redis -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
1、创建连接对象
import redis
r = redis.Redis(
host=”localhost”,
port=6379,
db=0
)
2、创建连接池对象
import redis
try:
pool = redis.ConnectionPool(
host=”localhost”,
port=6379,
db=0,
max_connections=20 连接池的数量
)
except Exception as e:
print(e)
3、关闭连接
del r
4、封装连接池
放到一个python文件中,以便于后续调用,这里命名为redis_db为例
5、操作Redis
-
操作字符串
from redis_db import pool
import redis
conn=redis.Redis(
connection_pool=pool
)
conn.mset({"country":"china","city":"shenyang"})
result=conn.mget("country","city")
for i in result:
print(i)
del conn
-
操作列表
from redis_db import pool
import redis
conn=redis.Redis(
connection_pool=pool
)
conn.rpush("country","china","Japan","Germany")
conn.lpop("country")
result=conn.lrange("country",0,-1)
for i in result:
print(i)
del conn
-
操作集合
from redis_db import pool
import redis
conn=redis.Redis(
connection_pool=pool
)
conn.sadd("number",100,200,300)
conn.srem("number",200)
result=conn.smembers("number")
for i in result:
print(i)
del conn
-
操作有序集合
from redis_db import pool
import redis
conn=redis.Redis(
connection_pool=pool
)
conn.zadd("keyword",{"张三":0,"李四":0})
conn.zincrby("keyword",10,"张三")
result=conn.zrevrange("keyword",0,-1)
for i in result:
print(i.decode("utf-8"))
del conn
-
操作哈希表
from redis_db import pool
import redis
conn=redis.Redis(
connection_pool=pool
)
conn.hset("1111","country","china")
conn.hset("1111","age","35")
conn.hset("1111","sex","male")
conn.hdel("1111","age")
result=conn.hexists("1111","sex")
print(result)
result= conn.hgetall("1111")
for i in result:
print(i.decode("utf-8"),result[i].decode("utf-8"))
del conn
3万+

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



