安装redis库Redis是一个key-value存储系统(数据库)。redis支持存储的value类型有很多种,如string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。
因为我是用ubuntu安装学习的
ubuntu 安装redis
1. 有密码:python连接redis分两种情况(一种是有密码,一种是无密码
因为redis安装的时候,默认是无密码的
import redis r = redis.Redis(host="192.168.xx.xx", port=6379,password="xxxx")
密码是:123456,host是redis对应的主机ip,port是端口6379(redis默认端口)
2.无密码:import redis r = redis.Redis(host='192.168.xx.xx', port=6379)
上面的连接方式属于普通连接(相对于连接池来说),此外还有连接池(connection pool)的连接方式,可以管理所有的连接,避免每次建立、释放连接带来的开销。
3. 连接池:import redis pool = redis.ConnectionPool(host='192.168.xx.xx', port=6379) r = redis.Redis(connection_pool=pool)4. 实例:
import redis
r = redis.Redis(host='192.168.31.196', port=6379)
r.set('xiao', '隔壁小红馆1') #添加
r.set('hong', '隔壁小红馆2') #添加
print(r.get('xiao')) #获取
print(r.get('hong')) #获取
为了解决中文乱码问题,在连接Redis的时候,加入utf-8的编码格式
import redis
r = redis.Redis(host='192.168.31.196', port=6379,decode_responses=True, charset='UTF-8', encoding='UTF-8')
r.set('xiao', '隔壁小红馆1') #添加
r.set('hong', '隔壁小红馆2') #添加
print(r.get('xiao')) #获取
print(r.get('hong')) #获取
在通过Python代码连接redis,并设置了两个key-value(xiao:隔壁小红馆1 和 hong:我是小红啊)
在Ubuntu里面乱码时, 退出环境,重新进入:
redis-cli --raw
传动带
这样就可以正常显示中文了
Redis存储结构是key-value,不同的是value类型的不同
string操作 1. set在Redis中设置值,默认不存在就创建,存在就修改
语法
SET KEY_NAME VALUE
返回值
在 Redis 2.6.12 以前版本, SET 命令总是返回 OK 。
从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK 。
r.set('xiao', '隔壁小红馆1') #添加
此外set设置的时候还可以加入过期时间(类似cookie有效期这样),一旦过期之后,再通过key去取value时,value的结果为None。
- 设置过期时间
#设置过期时间(秒),这里是5秒过期
r.setex('key1',5,'value1')
#设置过期时间(毫秒),这里是1000耗秒过期
r.psetex("key2",1000,"value2")
2.get
用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误
语法:
GET KEY_NAME
返回值
返回 key 的值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误。
print(r.get('xiao'))
3.mset
set是设置单个key-value,mset可以批量设置多个key-value
语法
MSET key1 value1 key2 value2 … keyN valueN
返回值
总是返回 OK
# 批量设置值
r.mset({'k3':'v3', 'k4':'v4'})
print(r.get('k3'))
print(r.get('k4'))
4.mget
get可以取出单个value,mget可以批量取出多个value
语法
MGET KEY1 KEY2 … KEYN
返回值
一个包含所有给定 key 的值的列表。
# 批量获取-法一
print(r.mget("k3","k4"))
# 批量获取-法二
v_list=["k3","k4"]
print(r.mget(v_list))
5. getrange
用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
语法:
GETRANGE KEY_NAME start end
返回值
截取得到的子字符串。
SET xiao "This is my test key" GETRANGE xiao 0 3 # "This" GETRANGE xiao 0 -1 # "This is my test key"6.Getset
用于设置指定 key 的值,并返回 key 的旧值。
语法:
GETSET KEY_NAME VALUE
返回值
返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。
当 key 存在但不是字符串类型时,返回一个错误。
GETSET db mongodb # (nil)(没有旧值,返回 nil) GET db # "mongodb" GETSET db redis # "mongodb" (返回旧值 mongodb) GET db # "redis"7. Setex
指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
语法:
SETEX KEY_NAME TIMEOUT VALUE
返回值
设置成功时返回 OK 。
SETEX mykey 60 redis # OK TTL mykey #60 GET mykey # "redis"



