Redis数据库
查看帮助文档
-
redis-server --help
启动redis服务端
-
redis-server
-
redis-server /usr/local/etc/redis.conf
-
brew services start redis
关闭redis
-
redis-cli shutdown
个人使用习惯
-
ps aux | grep redis 查看redis服务器进程
-
sudo kill -9 pid 杀死redis服务器
-
sudo redis-server /etc/redis/redis.conf 指定加载的配置文件
客户端指令
查看帮助文档
-
redis-cli --help
连接redis服务端
-
redis-cli -h 127.0.0.1 -p 6379
常用命令:
-
执行测试命令 ping
-
切换数据库 select 10
数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
redis.conf 配置说明
| 配置项 | 默认值 | 说明 |
|---|---|---|
| daemonize | no | 守护进程运行(后台运行) |
| pidfile | /var/run/redis.pid | 当 Redis 以守护进程方式运行时,会产生一个pid文件。Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定 |
| Port | 6379 | 指定 Redis 监听端口,默认端口为 6379 |
| bind | 127.0.0.1 | 绑定的主机地址 |
| timeout | 300 | 当客户端闲置多长秒后关闭连接,如果指定为 0 ,表示关闭该功能 |
| loglevel | notice | 指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning |
| logfile | stdout | 日志记录方式,默认为标准输出,如果配置 Redis 为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给 /dev/null |
| databases | 16 | 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id |
| dbfilename | dump.rdb | 指定本地数据库文件名,用于将内存的数据保存到硬盘中的某个文件中 |
| dir | ./ | 指定本地数据库存放目录,用于指定将内存的数据保存到硬盘中的某个位置下 |
| slaveof <masterip> <masterport> | 主从复制,实现双机备份。设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步 |
redis数据操作
五种数据类型:
-
字符串string
-
哈希hash
-
列表list:
-
集合set
-
有序集合zset
String类型:基础的数据存储类型
-
数据操作(可用命令查询操作格式:help set、help get ….)
-
增加:
set key value
-
查询:
get key
-
修改:
set key value
-
删除:
del key
-
-
批量数据操作
-
批量增加
mset key value key value
-
批量查询
mget key key
-
hash类型:hash⽤于存储对象,对象的结构为属性、值
-
数据操作(可用命令查询操作格式:help hset、help hget ….)
-
增加:
hset key field value
-
查询:
hget key field value
-
修改:
hset key field value
-
删除:
-
删除key中的field:
hdel key field
-
删除一整个key:
del key
-
-
-
批量数据操作
-
批量增加
hmset key field value field value
-
批量查询
hmget key field field
-
-
其他操作
-
查看key中所有的field和value:
hgetall key
-
查看key中所有的field:
hkeys key
-
查看key中所有的value:
hvals key
-
list类型:列表的元素类型为string,按照插⼊顺序排序
数据操作(可用命令查询操作格式:help lpush、help linsert ….)
-
增加:
-
从左往右增加
lpush key value value ...
-
从右往左增加
rpush key value value ...
-
特定位置插入添加
linsert key before|after old_value new_value
-
-
查询:
lrange key start_index stop_index
-
修改:
lset key index value
-
删除:
-
删除一整个key:
del key
-
删除key列表中的value
lrem key count value
count:
0: 删除所有value
正数:从左往右删count个value
负数:从右往左删count个value
-
set类型:⽆序集合,元素为string类型,元素具有唯⼀性(不重复),集合没有修改操作
数据操作(可用命令查询操作格式:help zadd、help zmembers ….)
-
增加:
sadd key member member ...
-
查询:
smembers key
-
删除
srem key member
zset类型:
有序集合,元素为string类型,元素具有唯⼀性(不重复),集合没有修改操作,每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
-
增加:
zadd key score member score member ...
-
查询:
-
查询在指定范围内的元素
zrange key start_index stop_index
-
查询权重在指定范围内的元素,包括min和max
zrangebyscore key min max
-
查询某个元素的权重
zscore key member
-
-
删除
-
删除指定元素
zrem key member
-
删除权重在指定范围的元素,包括min和max
zremrangebyscore key min max
-
键命令
-
查看当前所有的key
-
keys *
-
-
查看以a开头的所有key
-
keys a*
-
-
判断键key是否存在
-
exists key
-
-
查看键对应的value的类型
-
type key
-
-
append追加(key已存在)
-
append key value
-
-
设置key value的有效时间
-
setex key time value
-
-
给已存在的key设置有效时间
-
expire key time
-
-
查看剩余有效时间
-
ttl key
Python操作redis:
# # 1.python操作redis,未使用连接池 # import redis # # # def index(request): # # 创建redis连接,主机+端口+密码(没有设置可以不写)+数据库db # conn = redis.Redis(host='127.0.0.1', port=6379, db=0) # # 往0号数据库写入String数据 # conn.set('name', 'hcl') # # 往0号数据库批量写入String数据 # conn.mset({'address': 'xxx', "age": 18}) # # # 往0号数据库写入数据,并设置有效时间 # conn.setex('days', 5, 22) # return HttpResponse("设置成功") # # # def order(request): # # 创建redis连接,主机+端口+密码(没有设置可以不写)+数据库db # conn = redis.Redis(host='127.0.0.1', port=6379, db=0) # # 获取String数据 # res = conn.get('name') # print(res.decode('utf-8')) # # 获取数据,注意:此句已设置时间,超时则不存在days # res = conn.get('days') # print(res.decode('utf-8')) # return HttpResponse("获取成功") python操作redis1-未使用连接池
# 2.python操作redis,使用连接池 # import redis # # # def index(request): # # 创建连接池 # POOL = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0) # # 创建redis连接 # conn = redis.Redis(connection_pool=POOL) # # 往0号数据库写入hash数据 # conn.hset('people', 'name', 'hcl') # # 往0号数据库批量写入hash数据 # conn.hmset('people', {'age': 18, 'height': 180}) # # return HttpResponse("设置成功") # # # def order(request): # # 创建连接池 # POOL = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0) # # 创建redis连接 # conn = redis.Redis(connection_pool=POOL) # # 获取单个hash数据 # res = conn.hget('people', 'name') # print(res.decode('utf-8')) # # 批量获取hash数据 # res = conn.hgetall('people') # print(res) # return HttpResponse("获取成功") python操作redis2-使用连接池
# 3.Redis缓存,(依赖:pip3 install django-redis) # ''' # setting中添加配置信息: # CACHES = { # "default": { # "BACKEND": "django_redis.cache.RedisCache", # "LOCATION": "redis://127.0.0.1:6379/0", # "OPTIONS": { # "CLIENT_CLASS": "django_redis.client.DefaultClient", # "CONNECTION_POOL_KWARGS": {"max_connections": 100} # # "PASSWORD": "密码", # } # } # } # ''' # from django_redis import get_redis_connection # # # def index(request): # # 创建连接 # conn = get_redis_connection('default') # # 往0号数据库写入数据 # conn.set('age', 22) # return HttpResponse("设置成功") # # # def order(request): # conn = get_redis_connection('default') # # 获取单个hash数据 # res = conn.get('age') # print(res.decode('utf-8')) # return HttpResponse("获取成功") python操作redis3:Redis缓存-(依赖:pip3 install django-redis)
redis应用:
# # redis缓存应用1.缓存全站:缓存一整个网站信息 # ''' # 使用中间键: # 必须添加: # MIDDLEWARE = [ # 'django.middleware.cache.UpdateCacheMiddleware', # # 其他中间件... # 'django.middleware.cache.FetchFromCacheMiddleware', # ] # # 选择性添加: # # 设置缓存别名 # CACHE_MIDDLEWARE_ALIAS = "" # # 设置缓存时间:秒 # CACHE_MIDDLEWARE_SECONDS = "" # CACHE_MIDDLEWARE_KEY_PREFIX = "" # views.py不需要其他操作,会自动加入缓存 # ''' # import time # # # def index(request): # # 已经缓存到redis中,接下来再访问,时间不会更新 # ctime = str(time.time()) # return HttpResponse(ctime) # # # def order(request): # # 已经缓存到redis中,接下来再访问,时间不会更新 # ctime = str(time.time()) # return HttpResponse(ctime) redis缓存应用1-全站缓存:缓存一整个网站信息
# redis缓存应用2.单视图缓存:缓存单个views;优先级高于全局。即:单视图缓存存在,全局无效 # ''' # from django.views.decorators.cache import cache_page # @cache_page(60 * 15) # ''' # import time # from django.views.decorators.cache import cache_page # # # @cache_page(10) # def index(request): # # 单视图已经缓存到redis中,接下来再访问,时间不会更新 # ctime = str(time.time()) # return HttpResponse(ctime) # # # def order(request): # # 该视图没有缓存到redis中,接下来再访问,时间会更新 # ctime = str(time.time()) # return HttpResponse(ctime) redis缓存应用2-单视图缓存:缓存单个views;优先级高于全局
# redis缓存应用3.局部视图缓存:缓存views中的一部分; # 例如购物商城中的商品信息不变,可以为局部视图缓存,不必去数据库拿,而剩余数量则可以去数据库更新 # 适用于:某些经常不变化得到东西,比如前端的一些固定标题数据 # ''' # # 在HTML中: # {% load cache %} # # # //5000秒后消失 # {% cache 5000 缓存key %} # 缓存内容 # {% endcache %} # # ''' # # # def order(request): # # return render(request, 'order.html') redis缓存应用3-局部视图缓存:缓存views中的一部分;

浙公网安备 33010602011771号