Redis数据库
Posted xwj-0408
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis数据库相关的知识,希望对你有一定的参考价值。
安装并配置环境变量 redis后登录:redis-cli.exe -h 127.0.0.1 -p 6379
或者登录: redis-cli
nosql介绍
NoSQL:一类新出现的数据库(not only sql),它的特点:
不支持SQL语法
存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV(键值对)形式
NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
NoSQL中的产品种类相当多:
Mongodb
Redis
Hbase hadoop
Cassandra hadoop
理解关系型数据库 与 非关系型数据库区别和应用
适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之
“事务”特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务
两者在不断地取长补短,呈现融合趋势
Redis简介
Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色。
redis优势:
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
redis应用场景:
用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)
可以在某些特定应用场景下替代传统数据库——比如社交类的应用
在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车
只要你有丰富的想象力,redis可以用在可以给你无限的惊喜…….
切换数据库
数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库。
select index # 切换数据库
Redis数据结构
redis是key-value的数据结构,每条数据都是?个键值对
键的类型是字符串
注意:键不能重复
值的类型分为五种:
字符串string
哈希hash
列表list
集合set
有序集合zset
Redis数据操作行为
保存 修改 获取 删除
string 类型
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
----------------------------------------------------------------------
--设置键值
--set key value
set school just
--设置键值及过期时间,以秒为单位
--setex key seconds values
setex aa 10 hello
--设置多个键值
--mset key1 value1 key2 value2...
mset a1 python a2 c++ a3 java
--追加值
--append key value
append a2 "figure" --向键为a2中追加值为"figure"
-------------------------------------------------------------------------------------------获取:根据键获取值,如果不存在则此键返回为nil
--get key
get school
--一次获取多个键的值
--mget key1 key2 key3
mget a1 a2 a3
--删除del
--del key
del school
键命令
查找键,参数支持正则表达式
--keys pattern
keys * 查看所有键
keys 'a*' 查看名称中包含a的键
判断键是否存在,若存在返回1,不存在返回0
--exists key1
exists a1 --判断a1是否存在
查看键对应的value的类型
--type key
type a1 --查看键a1的值类型,为redis支持的五种类型中的一种
删除键及对应值
--del key1 key2
del a2 a3
设置过期时间,以秒为单位;如果没有指定过期时间则一直存在,直到使用del移除
expire key seconds
expire a1 10
查看有效时间,以秒为单位
--ttl key
ttl bb --查看键'bb'的有效时间
hash类型
hash用于存储对象,对象的结构为属性、值
值的类型为string
-----------------------------------------------------------------------------------------
--设置单个属性
--hset key field value
hset user name Tom
--设置多个属性
--hmset key field1 values field2 values2 ...(hmset --> hash many set)
hmset address China shanghai American Newyork Janpan Tokyou
hmset user name xwj age 22 school AnhuiUniversity
--获取一个属性的值
--hget key field
--hget user name
--获取指定键多个属性的值
--hmget key field1 field2
hmget address China American Janpan -- 获取键address属性 China American Janpan
--获取所有属性的值
--hvals keys
hvals address
--删除hash键和值,使用del命令;删除属性,属性对应的值会被一起删除。
--hdel key field field
hdel address Janpan --删除键 address 的属性Janpan;
--类型
type key
--显示所有键
keys *
list类型
列表的元素类型为string
按照插入顺序排列
----------------------------------------------------------------------------------
增加操作
----------------------------------------------------------------------------------
在左侧插入数据
--lpush key value1 value2
lpush a1 a b c --从键为'a1'的列表左侧加?数据a 、 b 、c
在右侧插入数据
--rpush key values1 values2
rpush a1 0 1
--在指定元素的前或后插入新的元素
--linsert key berfore 或 after 现有元素 新元素
linsert a1 before b 3 --在键为“a1”的列表中的元素'b'前加入"3"
--获取:返回列表里指定范围内的元素
--start、stop为元素的下标索引
--索引从左侧开始、第一个元素为0
--索引可以是负数,表示从尾数开始计数,如-1表示最后一个元素
--lrange key start stop
lrange a1 0 -1 --获取键"a1"的列表所有元素
--设置指定元素索引位置的元素值
--索引从左侧开始,第一个元素为0
--索引可以是负数,表示尾部开始计数,如-1表示最后一个元素
--lset key index value
lset a 1 z --修改键为"a1"的列表中下标为1的元素值为"z"
--删除指定元素
将列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除(从左——>右)
count < 0: 从尾往头移除(从右——左)
count = 0: 移除所有
lpush a2 a b a b a b --向列表'a2'中加?元素'a'、'b'、'a'、'b'、'a'、'b'
从'a2'列表右侧开始删除2个'b'
lrem a2 -2 b --lrem(left remove) 从"a2"列表右侧开始删除2个"b"
set类型
set类型
无序集合
元素为string类型
元素具有唯?性,不重复
说明:对于集合没有修改操作
----------------------------------------------------------------------------------
添加元素
--sadd key member1 member2
sadd language java python c++ --(sadd = set add)
获取
--返回所有的元素
--smembers key
smembers language --(smember set member)
--删除指定元素(成员)
--srem key member
srem language c++ --删除language成员的c++
zset类型
sorted set,有序集合
元素为string类型
元素具有唯?性,不重复
每个元素都会关联?个double类型的score,表示权重,通过权重将元素从?到?排序。
说明:没有修改操作
----------------------------------------------------------------------
增加:
zadd key score1 member1 score2 member2...
zadd name 4 Chencao 5 wangwu 6 zhaoliu 3 zhangsan
获取:
返回指定范围内的元素
start、stop为元素的下标索引
索引从左侧开始,第?个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后?个元素
-- zrange key start stop
zrange name 0 -1 -- 获取键"a4“集合中所有元素
返回score值在min和max之间的成员
--zrangebyscore key min max
zrangebyscore names 3 7 --返回权重为3-7之间的所有成员
--返回成员member的score值
zscore key member
删除
删除指定元素
--zrem key member1 member2...
zrem names zhangshan --删除集合“names”中的元素"zhangsan"
删除权重在指定范围的元素:
zremrangebyscore key min max
zremrangebyscore names 5 7 --删除集合"names"中的权限在5,7之间的元素
Ridis与python交互
打开Pycharm,联网安装redis
调用模块:
from redis import *
这个模块中提供了StrictRedis对象(Strict严格)用于连接redis服务器,并按照不同类型提供了不同方法,进行交互操作。
StrictRedis对象方法
通过init创建对象,指定参数host、port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0。
sr = StrictRedis(host = "localhost",port = 6379,db = 0)
简写为
sr = StrictRedis()
-----------------------------------------------------------------------------------------
根据不同的类型,拥有不同的实例?法可以调?,与前?学的redis命令对应,?法需要的参数与命令的参数?致。
String:
set
setex
mset
append
get
mget
key
Keys:
exists
type
delete
expire
getrange
ttl
Hash:
hset
hmset
hkeys
hget
hmget
hvals
hdel
List:
lpush
rpush
linsert
lrange
lset
lrem
Set:
sadd
smembers
srem
Zset:
zadd
zrange
zrangebyscore
zscore
zrem
zremrangebyscore
连接Redis服务器
from redis import *
if __name__ == "__main__":
try:
#创建StrictRedis对象,与redis服务器建立链接
sr = StrictRedis()
except Exception as e:
print(e)
String -操作
from redis import *
if __name__ =="__main__":
try:
#创建StrictRedis对象,与redis服务器建立链接
sr = StrictRedis()
res = sr.set("name","普京") #添加键name,值为"普京"
print("增加操作",res) # 输出响应结果,如果添加成功则返回True,否则返回False
res1 = sr.get("name") #获取键name的值
print("获取操作",res1) #输出键的值,如果键不存在则返回None
res2 = sr.set("name","上海")
print("更改操作",res2) # 输出响应结果,如果操作成功则返回True,否则返回False
res3 = sr.keys()
print("获取所有键操作",res3) # 获取所有键,输出响应结果,所有的键构成一个列表,如果没有则返回空列表
res4 = sr.delete("name")
print("删除操作",res4) #输出响应结果,如果删除成功则返回受影响的键数,否则返回0。
except Exception as e:
print(e)
主从
以上是关于Redis数据库的主要内容,如果未能解决你的问题,请参考以下文章
RedisRedis 数据库 安装配置访问 ( Redis 简介 | 下载 Redis 安装包 | 安装 Redis 数据库 | 命令行访问 Redis | 使用可视化工具访问 Redis )