一类新出现的数据库(not only sql),它的特点有:
Redis 与其他 key - value 缓存产品有以下三个特点:
(1) 通过brew去安装
brew install redis
/opt/homebrew/opt/redis
(2) 在前台启动和停止 Redis
要测试 Redis 安装,可以运行下面命令:
redis-server
如果成功,您将看到 Redis 的启动日志,Redis 将在前台运行。
可以看到这种启动方式, 终端会一直工作, 要停止 Redis,输入 Ctrl-C 。
(3) 在后台启动和停止 Redis
通过 launchd 后台启动, 命令如下:
brew services start redis
这将启动 Redis 并在登录时重新启动它。您可以通过运行以下命令来检查 launchd 托管 Redis 的状态:
brew services info redis
brew services stop redis
(1) 下载源文件
wget https://download.redis.io/redis-stable.tar.gz
(2) 解压/复制
tar -zxvf redis-stable.tar.gz
sudo mv ./redis-stable /usr/local/redis/
(3) 编译安装
cd /usr/local/redis/
sudo make
sudo make test
sudo make install
(4) 查看安装文件
cd /usr/local/bin
ls -all
- redis-server: redis服务器
- redis-cli: redis命令行客户端
- redis-benchmark: redis性能测试工具
- redis-check-aof: AOF文件修复工具
- redis-check-rdb: RDB文件检索工具
(5) 移动配置文件
sudo cp /usr/local/redis/redis.conf /etc/redis/
2.3 个性化配置
Macos的配置文件位于:
/opt/homebrew/etc/redis.conf
Linux的配置文件位于:
/etc/redis/redis.conf
(1) 绑定ip
如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip, 默认是配置了本机地址
(2) 端⼝,默认为6379
(3) 是否以守护进程运⾏
(4) 数据库文件
(5) 数据⽂件存储路径
(6) 配置日志文件
需要提前创建目录和文件
(7) 默认数据库的个数
客户端连接的命令为
redis-cli
通过–help可以查看帮助选项
连接本机可以不需要指定-h和-p, 连接本机成功展示如下:
此时输入ping会返回pong
数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
通过select n可以切换数据库, 其中n为0~15, 如下所示:
Redis支持以下5种主要的数据类型:
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
(1) 保存值
如果设置的键不存在则为添加,如果设置的键已经存在则修改
set key value
setex key second value
例如:
(3) 设置多个键值
mset key1 value1 [key2 value2 …]
(4) 追加值
append key value
(5) 获取单个值
get key
(6) 根据多个键获取多个值
mget key1 key2 ...
(1) 搜索键, 支持正则表达式
keys pattern
(2) 判断键是否存在
exists key1
存在返回1, 不存在返回0
(3) 查看键对应的value的类型
type key
del key1 key2 ...
expire key seconds
返回结果 (integer) 1 表示命令执行成功,且设置过期时间成功。
(6) 查看有效时间,以秒为单位
ttl key
返回结果 (integer) -2 表示该键不存在或已过期。具体含义如下:
hset key field value [field value...]
hkeys key
hget key field
hmget key field [field...]
hvals key
(6) 删除操作
删除整个hash键及值,使⽤del命令
删除属性,属性对应的值会被⼀起删除
hdel key field1 field2 ...
lpush key value1 value2 ...
rpush key value1 value2 ...
(2) 在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素
(3) 获取元素
返回列表⾥指定范围内的元素
lrarge key start stop
sadd key member1 member2 ...
smembers key
srem key member [member...]
zadd key score1 member1 score2 member2 ..
例如向键’a4’的集合中添加元素’lisi’、‘wangwu’、‘zhaoliu’、‘zhangsan’,权重(score)分别为4、5、6、3
(2) 获取
zrange key start stop
zrangebyscore key min max
zrem key member1 member2 ...
删除集合’a4’中元素’zhangsan’
删除权重在指定范围的元素
zremrangebyscore key minindex maxindex
进入虚拟环境中安装
mkvirtualenv -p python3 redis_study
workon redis_study
pip install redis
from redis import *
if __name__ == "__main__":
try:
# 创建StrictRedis对象,与redis服务器建⽴连接
# 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0
sr = StrictRedis(host='localhost', port=6379, db=0)
# 简写
# sr=StrictRedis()
except Exception as e:
print(e)
根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致
(1) set操作
⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
注意: Redis中存储的数据都是二进制的,所以存储的对象都是字节串, 字节串前是有一个b来区分的
if __name__ == "__main__":
try:
sr = StrictRedis()
result = sr.set('name', '张三2')
# 输出响应结果,如果添加成功则返回True,否则返回False
print(result)
except Exception as e:
print(e)
(2) string获取
⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None
if __name__ == "__main__":
try:
sr = StrictRedis()
# 获取键name的值
result = sr.get('name')
# 有中文的话需要解码
decoded_result = result.decode('utf-8')
print(result)
print(decoded_result)
except Exception as e:
print(e)
输出结果:
b'\xe5\xbc\xa0\xe4\xb8\x892'
张三2
(3) string修改
⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
from redis import *
if __name__ == "__main__":
try:
sr = StrictRedis()
# 获取键name的值
sr.set('name', 'zhangsan')
result = sr.get('name').decode('utf-8')
print(f"修改前{result}")
sr.set('name', 'lisi')
result = sr.get('name').decode('utf-8')
print(f"修改后{result}")
except Exception as e:
print(e)
输出结果:
修改前zhangsan
修改后lisi
(4) string删除
⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0
from redis import *
if __name__ == "__main__":
try:
sr = StrictRedis()
# 获取键name的值
sr.set('name', 'zhangsan')
sr.delete('name')
result = sr.get('name')
print(f"删除后{result}")
except Exception as e:
print(e)
结果:
删除后None
(5) 获取键
⽅法keys,根据正则表达式获取键
from redis import *
if __name__ == "__main__":
try:
sr = StrictRedis()
# 获取所有的键
result = sr.keys()
# 输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表
print(result)
except Exception as e:
print(e)
输出结果:
[b'hobby', b'user', b'arr1']
之前django的session默认是存在的数据库里面的,我们也可以把session存储在redis里面
(1) 创建django项目
workon redis_study
pip install django
pip install redis
cd workspace/python/redis_study
django-admin startproject session_test
(2) 修改settings文件,增加如下项
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
'host': 'localhost',
'port': 6379,
'db': 2, # 选择3个数据库
'password': '',
'prefix': 'session',
'socket_timeout': 1
}
SESSION_COOKIE_AGE = 3600 # Session过期时间,单位为秒
其中,SESSION_ENGINE指定使用redis_sessions.session作为Session存储引擎。
SESSION_REDIS指定了Redis的连接配置,其中包括主机、端口、数据库、密码等信息。prefix参数指定了存储在Redis中的Session键的前缀,可以根据需要自行设置。
SESSION_COOKIE_AGE指定了Session的过期时间,单位为秒。具体的配置可以根据实际需求进行调整。
(3) 添加应用
cd session_test
python manage.py startapp booktest
(4) 修改setting文件添加booktest和redis应用
INSTALLED_APPS = [
...
'booktest',
'redis'
]
(5) 配置项目的url文件
将booktest应用的url配置加到映射中
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# 添加映射, 将booktest/路径 和 booktest.urls.py进行关联
path('booktest/', include('booktest.urls')),
]
(6) 测试
打开booktest/views.py文件,创建session_set和session_get视图如下
from django.http import HttpResponse
# 保存session
def session_set(request):
request.session['name'] = '张三'
return HttpResponse('ok')
# 获取session
def session_get(request):
name = request.session['name']
return HttpResponse(name)
添加booktest/urls.py文件,配置url如下
from django.contrib import admin
from django.urls import path, include
from booktest import views
urlpatterns = [
path('session_set/', views.session_set, name='session_set'),
path('session_get/', views.session_get, name='session_get'),
]
(7) 启动项目
python manage.py runserver
输入地址:http://127.0.0.1:8000/booktest/session_set/ 进行session存储
输入地址http://127.0.0.1:8000/booktest/session_get/ 获取session值
然后通过redis-cli客户端查看
查看对应的value
Base64在线解码https://base64.us/
其中\u5f20\u4e09对应的中文就是张三