redis数据库

一、概述:

redis数据库是一个内存数据库,基于内存进行数据存储的,redis数据库访问速度特别快。因此,redis通常被用于缓存系统、存储大量活跃数据,可以极大地提高网站的响应速度。redis数据库里面的数据是通过key-value键值对的方式进行存储的。

二、redis数据库的优点:

(1)redis数据库是完全开源免费的。
(2)支持数据持久化,redis可以通过配置将内存中的数据保存到磁盘上,redis数据库重启后再将数据加载到内存中。
(3)redis数据库支持多种数据结构,如:字符串、列表、哈希表、有序集合、无序集合等。
(4)支持原子操作,支持事务。redis数据库中的所有操作都是原子性的。
(5)支持数据过期功能。
(6)对数据有高可用性和可扩展性

三、redis数据库和memcached对比

(1)redis和memcached都是基于内存进行存储的数据库
(2)redis数据库可以用来做数据存储,但memcached通常被用来做缓存
(3)对于redis数据库来说,存储的数据是有结构的,而对于memcached来说,存储的数据只有一种类型:字符串,而redis支持字符串、列表、有序集合(zset)、无序集合(set)、哈希表等。

四、redis的一些简单操作

默认端口:6370
redis数据库一共有16个库(0-15),默认选择的是第1个库(0库)
redis中有些操作和数据类型没有关系:
keys * :查看数据库中的所有键
expire 键名 秒数:设置过去时间
persist 键名 :移除过期时间
select 库名:选择对用数据库
flushdb :删除当前所在数据库的所有数据
flushall :清空所有数据库中的数据
set key value 设置键和值
get key 获取值
del key 删除键

字符串(str)
 getrangename0 3#截取字符串 strlen name#获取字符串长度 setex name 5 zhangsan#设置带有过去时间的key-value5秒过期 mset name lisi sex male#设置多个key-value mget name age #获取多个value append namewangwu#字符串结尾追加内容 incr age#数字自增1 incrby age5#数字加上指定的整数值 incrby age 2.5#数字加上指定的浮点数 decrage#数字自减1 decrby age 5#数字减去指定的整数值
哈希表
hset # hset 表名 设置哈希表hset 800 nametom #设置表名为800 字段为name 值为tomhset 800 age 25#给表800 添加一个字段age 为25hmset#设置哈希表多个字段hmset 900 name tom age 25sex male#设置多个字段hget# hget 900 name 获取哈希表中的字段hget 900 name#获取哈希表 900下的字段namehmget 900 name age sex #获取哈希表中的多个字段hgetall 900#获取哈希表中的所有的值hkeys 900#获取所有哈希表的字段名hlen 900#获取哈希表中字段的shulhexists 900 name#哈希表中是否存在某个字段hvals 900#获取哈希表中所有字段的值hdel 900 name age #删除哈希表中的字段值hincrby 900 age 10#让哈希表中的某一字段增加固定的整数值(10)hincrbyfloat 900 age 10.5#让哈希表中的某一字段增加固定的浮点值(10.5)
列表
rpush dname 张三 李四 王五 赵六#向列表dname中从右添加元素lpush dname 王麻子#从左边向列表dname中添加元素lset dname 2赵斌#修改数据,将王五修改为赵斌lrange dame 0 -1#获取所有元素llendname#获取列表长度lindex dname 0#用索引获取某个元素linsert dname beform 张三 刘斌#在某个元素前插入元素lpop dname#从左边删除一个元素rpop dname#从右边删除一个元素lrem dmane 1 张三#删除第一个张三
集合 –》不可重复,不支持索引

无序集合

sadd empno 800 #给集合添加值sadd empno 800 900#给集合添加多个值smembers empno#获取集合中的所有元素scard empno#获取集合的所有元素sismember empno 800#判断是否含有某个元素srem empno 800 900#删除元素delempno#删除集合spop empno#随机删除并返回集合的某个元素srandmember empno 5#随机返回集合中的5个元素

有序集合:有序集合是带有排序功能的集合,redis会按照元素分数值排序

zadd keyword 0 '鹿晗' 0 '张朝阳' 0 '马云'#为集合中添加元素zincrby keyword 1 '鹿晗'zincrby keyword 5 '马云'zincrby keyword 2 '张朝阳'#为集合添加值zrevrange keyword 0 -1#获取所有的值,并降序(rev)zrange keyword0 -1#获取所有的值,并升序zcard keyword#获取有序集合的长度zcount keyword 5 10#查询某个分数区间的元素数量zscore keyword '马云'#返回元素的分数值zrangebyscore #获取分数值区间内的集合内容(升序)zrangebyscore keyword 5 10zrangebyscore keyword 5 (10 #( 不包含10zrangebyscore keyword 100+inf#100以上的所有数据zrevrangebyscore#获取分数值区间内的集合内容(降序)zrevrangebyscore keyword 10 5#参数为也为倒序zrank keyword '马云'#获取元素的升序排名(从0开始)zrevrank keyword '马云'#获取元素的降序排名(从0开始)zrem keyword '马云' '张朝阳'#删除有序集合中的元素zremrangebyrank keyword 0 2#删除排名区间内的元素zremrangebyscore keyword -inf (500#删除负无穷到500的值
key的一些命令
del keyword#删除记录exists keyword#判断是否存在某个keyexpire keyword 5#设置过期时间秒pexpire keyword 1000#设置过期时间毫秒expireat keyword 1544803200#设置过期时间时间戳morekeyword 1#把记录迁移到其他逻辑库rename keyword tem#修改key的名称(重命名)persist keyword#移除过期时间type keyword#判断value数据类型
python操作redis数据库
#安装redispip install redisimport redis#链接redisr =redis.Redis(host='localhost',#主机port=6379, #端口password='',#密码db=0)#创建连接池pool =redis.ConnectionPool(host='localhost',port=6379,password='',db=0,max_connections=20)#操作集合con =redis.Redis(connection_pool =pool)con.set("country","英国")con.set("city","伦敦")city =con.get("city").decode("utf-8")#要编码print(city)con =redis.Redis(connection_pool=pool)#删除操作,集合try:con.delete("country","city")con.mset({"country":"德国","city":"柏林"})result =con.mget("country","city")for one in result:print(one.decode("utf-8"))except Exception as e:print(e)#操作列表con =redis.Redis(connection_pool=pool)try:con.rpush("dname","董事会","秘书处","财务部","技术部")con.lpop("dname")result =con.lrange("dname",0,-1)for one in result:print(one.decode('utf-8'))except Exception as e:print(e)finally:del con#操作无序集合con =redis.Redis(connection_pool=pool)try:con.sadd("employee",8001,8002,8003)con.srem("employee",8002)result =con.smembers("employee")for one in result:print(one.decode('utf-8'))con.zadd("keyword",{"马云":0,"张朝阳":0,"丁磊":0})con.zincrby("keyword",10,"马云")result =con.zrevrange("keyword",0,-1)for one in result:print(one.decode('utf-8'))except Exception as e:print(e)#操作哈希表con =redis.Redis(connection_pool=pool)try:con.hmset("9527",{"name":"scott","sex":"male","age":38})con.hset("9527","city","纽约")con.hdel("9527","age")result =con.hexists("9527","name")print(result)result =con.hgetall("9527")for one in result:print(one.decode('utf-8'),result[one].decode('utf-8'))except Exception as e:print(e)