Redis必备基础知识

一.开启Redis数据库

1.设置redis.windows.conf

#443行,requirepass修改为:
requirepass [自己设置的密码]

2.开启服务与关闭服务

方法一:

#Redis作为服务启动,开启服务:
redis-server --service-start

#启动数据库,指定本地主机:
redis-cli.exe -h 127.0.0.1 -p 6379

#其他指令
关闭服务:redis-server --service-stop
卸载服务:redis-server --service-uninstall

方法二:

#开启服务,该cmd作为服务,一直运行,不可关闭
redis-server redis.windows.conf

#开打一个新的终端,启动数据库,指定本地主机:
redis-cli.exe -h 127.0.0.1 -p 6379

#关闭服务开启的cmd窗口则关闭了服务

3.设置密码

config set requirepass [你自己设置的密码]

4.端口号

Redis的端口号为:6379

二、Redis值的类型

Redis的6种数据类型

  • String
  • hash
  • list
  • set
  • zset

针对这几种数据类型,数据库操作的全部命令

1.String字符串

Redis的最基本类型,最大能存储512M的数据。它的类型是二进制的,可以存储任何数据,如:数字、图片、序列化对象等。

一个key对应一个value
(1)设置键值

设置键值 语句 例子
设置单个键值 set key value set name lyh
设置多个键值 mset key value[key value key …] mset name lyh age 21
设置值及过期时间(单位:s) setex key seconds value setex age 10 21
查看有效时间 ttl key ttl age
key不存在时才设置key值 setnx key value setnx name liyuhong

(2)key的操作

key的操作 语句 例子
根据键值获取值,不存在则返回None(null 0 nil) get key get name
获取多个key值 mget key1 [key2 …] mget name age
返回key种,字符串值的子字符 getrange key start end getrange name 0 2
修改key对应的value值,并返回旧value值 getset key value getset name liyuhong
判断key是否存在 exists key exists name
查看key对应的value类型 type key type name
修改key的名称,当新的key名不存在时(与其他名称无冲突) rename key newkey rename name myname(当myname已存在,则不会发生修改)
重命key名(冲突则覆盖,以新的key为准) rename key newkey rename name myname
将key移动到指定的数据库 move key dbnum move name 1(将以name为key的键值对移动到库1中)
随机返回一个key rangdomkey randomkey直接使用
与生存时间相关操作 语句 例子
直接设置值及过期时间(单位:s) setex key seconds value setex age 10 21
设置已存在的key的过期时间(单位:s) expire key seconds expire name 10
查看有效时间(单位:s) ttl name ttl name
查看有效时间(单位:ms) pttl key pttl name
移除key的过期时间,将key持久化(ttl作废) persist key persist name
删除key 操作
删除键及对应的值 del key [key…]
flushdb 删除当前数据库中所有的key
flushall 删除所有数据库中的key

(3)运算
条件:值是字符串类型的数字

运算 语句 例子
将key对应的value值+1 incr key incr age
将key对应的value值-1 decr key decr age
将key对应的value值+整数 incrby key intnum incrby age 3
将key对应的value值-整数 decr key intnum decr age 3

(4)其他

其他用法 语句 例子
字符串形式追加value的值 append key value append age 100
获取value长度 strlen key strlen name

(5)key键的正则

key键的正则操作 语句 例子
查询所有符合给定模式(正则)的key keys * / keys *o* / keys t?? ?匹配任意一个,*匹配0个1个多个
查询所有符合原子表的模式 f[io]nd / f[^io] / f[a-z]nd [xx]匹配任意一个xx,[^xx]匹配除xx以外,[x-y]匹配从x到y

2.hash哈希

hash用于存储对象
{
name:liyuhong
age:21
}
Redis的hash是一个键值对的集合

(1)设置哈希值

操作 语句 例子
设置单个值 hset key field value hset myinfo name liyuhong
设置多个值 hmset key field value [field value …] hmset myinfo name lyh age 21
为哈希表key中指定的字段的整数值赋予增量increment hincrby key field increment hincrby myinfo age 10
字段field不存在时,设置哈希表字段的值 hsetnx key field value hsetnx myinfo name lyh

(2)获取

操作 语句 例子
获取一个属性的值 hget key field hget myinfo name
获取多个属性的值 hmget key field [field …] hmget myinfo name age
获取所有字段和值 hgetall key hgetall myinfo
获取所有字段 hkeys key hkeys myinfo
获取所有的值 hvals key hvals myinfo
返回包含数据的个数 hlen key hlen myinfo

(3)其他

操作 语句 例子
判断字段是否存在,1存在,0不存在 hexists key field hexists myinfo name
删除字段及值 hdel key field [field] hdel myinfo name age
返回值的字符串长度 hstrlen key field hstrlen key name

3.list列表

Redis列表是简单的字符串列表,按照插入顺序进行排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)

(1)设置列表

操作 语句 例子
在头部插入 Ipush key value [value …] Ipush mylist 1 2 3
将一个值插入到已存在的列表头部,列表不存在,操作无效 lpush key value lpush mylist 4
在一个元素value1的前 / 后插入新元素value2 linsert key before / after value1 value2 linsert mylist before 3 77
在尾部插入 rpush key value [value … rpush mylist 5 6 7
为已存在的列表添加值 rpush key value rpushx mylist 9
更改索引对应的值 lset index value lset mylist 0 1(将索引0对应的值更改为1)
返回列表中索引对应的值 lindex key index lindex mylist 0

(2)获取

操作 语句 例子
移除并返回key对应的list的第一个元素 lpop key lpop mylist
移除并返回key对应的list的最后一个元素 rpop key rpop mylist
返回存储在key的列表中指定范围的元素 lrange key start end lrange mylist 0 -1(返回所有元素)

(3)其他

其他操作 语句 例子
裁剪列表,改为原列表的子集 ltrim key strat end ltrim mylist 1 -1
返回存储在key里的list的长度 llen key llen mylist

4.set集合

无序集合,元素类型为string类型,具有:唯一性、不重复性、无序性
{a,b}
(1) 设置集合

操作 语句 例子
创建集合、添加元素 sadd key member [member …] sadd myset a b c d

(2)获取

操作 语句 例子
返回key集合中所有元素 smembers key smembers myset
返回集合元素个数 scard key scard myset
返回集合中一个或多个随机数 srandmember key [count] srandmember myset(默认返回一个随机元素)
随机移除并返回集合中的一个元素 spop key spop myset
移除集合中一个或多个成员 srem key member [member …] srem myset a b c d

3.集合中的其他操作

操作 语句
求多个集合的交集 sinter key1 key2
求多个集合的差集 sdiff key1 key2
求多个集合的并集 sunion key1 key2
判断元素是否在集合中,是1,不是0 sismember key member

5.zset 有序集合

概述:

  1. 有序集合,元素类型为String,元素具有唯一性
  2. 每个元素都会关联一个score(表示权重),通过权重的大小进行排序,元素的score是可以相同的

(1).设置

操作 语句 例子
添加有序集合 zadd key score member [score member …] zadd myzset 1 a 2 c 3 b
有序集合中对指定成员的权重增加incrememt zincrby key incrememt member zincrby myzset 1 a

(2)获取

操作 语句 实例
返回指定范围的元素 zrange key start end zrange myzset 0 -1
返回元素个数 zcard key zcard myzset
返回有序集合key中,score在min和max之间的元素个数 zcount key min max zcount myzset 1 3
返回有序集合中,成员member的score值 zscore key member zscore myzset a

其他:
在我们进入数据以后,默认存在0库中,可以通过select数据库编号(0-15)进行切换,这些编号的数据库都是固定的

三、持久化设置

Redis有两种持久化方案,RDB(Redis DataBase)和AOP(Append Only File)
RDB和AOF
RDB:是redis默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis重启会通过加载dump.rdb恢复数据。
AOF:默认不开启。他的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis重启会根据日志文件的内容,将写命令从前到后执行一次已完成数据的恢复工作

(1)RDB持久化设置
默认情况下,redis在磁盘上创建名为dump.rdb的数据快照的二进制格式文件,可以通过配置文件,配置:每个N秒且数据集上至少有M个变化时创建快照、是否对数据进行压缩、快照的名称、存放快照的工作目录等。redis默认配置如下:

900秒后且至少一个key发生变化时创建快照
save 900 1
300秒后且至少10key发生变化时创建快照
save 300 10
60秒收 且至少10000key发生变化时创建快照
save 60 10000
创建快照时 对数据进行压缩
rdbcompression yes
快照名称
dbfilename dump.rdb

(2)AOP持久化设置
利用快照的持久化方式不是很可靠,当运行Redis的计算机停止工作、意外断电、意外杀掉了Redis的进程,那么最近写入Redis的数据将会丢失。AOF方式是一个替代的方案,用以最大限度的持久化数据,通过redis.config进行开启还是关闭:

关闭aof
appendonly no
开启aof
appendonly yes

四、用python操作redis

1.安装、导入redis模块

# 安装
pip install redis

# 导入
import redis

2.连接方式

  1. StrictRedis实现大部分官方的命令。向后兼容旧版本的redis
  2. Redis是StrictRedis的子类

官方推荐使用StrictRedis
连接实例:

import redis
redis.Redis(host='127.0.0.1',password='密码',port=6379,db=0,decode_responses=True)
r = redis.StrictRedis(host='127.0.0.1',decode_responses=True)
print(r)

decode_responses=True获得的结果自动进行解码,否则,如果不添加参数,需要手动解码res.decode(‘utf-8’)

3.连接池connection pool

概述:
管理一个redis server的所有连接,避免每次建立、释放连接的开销,默认每个redis实例都会维护一个自己的连接池,可以直接建立一个连接池,作为参数传递给redis,这样可以实现多个redis共享一个连接池

实例:

pool = redis.ConnectionPool(pool='127.0.0.1',db=0,port=6379,decode_responses=True)
r = redis.Redis(connection_pool=pool)
print(r)

4. python操作字符串string类型

连接

import redis
r = redis.Redis(host='127.0.0.1',db=0,decode_responses=True)

(1)set设置值

r.set('name','liyuhong')

(2)get获取值

print(r.get('name'))

(3)批量设置值mset

r.mset(age=18,sex='男',hobby='写代码')

(4)批量获取值mget

r.mget('name','age','sex','hobby')

(5)设置新值,打印原值getset

print(t.getset('name','lyh'))

(6)返回对应值的长度strlen

print(r.strlen('name'))

(7)追加值append

r.append('age',1)
print(r.get('age'))

(8)查看类型type

print(r.type('name'))

5.python操作哈希hash类型

(1)设置hset

r.hset('myset','name','liyuhong')

(2)获取hget

print(r.hget('myset','name'))

(3)获取所有键值hgetall

print(r.hgetall('myset'))

(4)批量设置键值对 hmset

r.hmset('mset',{'name':'liyuhong','age':21})

(5)批量获取多个key的值 hmget

print(r.hmget('mset',['name','age']))

(6)获取hash中键值对的个数 hlen

print(r.hlen('mset'))

(7)获取hash中所有的key值 hkeys

print(r.hkeys('mset'))

(8)获取hash中所有的value值 hvals

print(r.hvals('mset'))

(9)检查当前的hash中是否有当前的key hexists

print(r.hexists('mset','name'))

(10)删除hash指定的key hdel

r.hdel('mset','name')

6.python操作列表list类型

(1)lpush从头部添加元素

r.lpush('list',1,2,3,4)

(2)rpush从尾部添加元素

r.rpush('list',5,6)

(3)llen获取元素的个数

r.llen('list')

(4)linsert在列表的某个值的前后插入一个新值

r.linsert('list','after',5,7)
name key值 / 前后before、after / 指定被插入的元素 / 插入的值

(5)lpop移除列表最左侧的一个元素并返回

print(r.lpop('list'))

(7)lindex根据索引获取列表的元素

print(r.lindex('list',0))

(8)lrange分片获取元素

print(r.lrange('list',0,-1))

7.python操作集合set类型

(1) sadd给name对应的集合添加元素

r.sadd('set','a','b','c')

(2)smembers获取集合中的所有元素

print(r.smembers('set'))

(3)sccard 集合中元素的个数

print(r.scard('set'))

(4)sdiff多个集合的差集

print(r.sdiff('set1','set2'))

(5)sinter 获取并集

print(r.sinter('set1','set2'))

(6)sismember检查当前的值是否是当前集合内的元素

print(r.sismember('set','a'))

(7)spop从集合的右侧删除一个元素

print(r.pop('set'))

8.python操作有序集合zset类型

(1)zadd添加元素

r.zadd('zset',a=1,b=2,c=3)

(2)zcard获取有序集合内元素的数量

print(r.zcard('zset'))

(3)zcount获取有序集合内,权重在min和max之间的个数

print(r.zcount('zset',0,-1)

(4)zrange返回一个范围内的元素

print(r.zrange('zset',0,-1))

(5)zscore获取元素所对用的权重

print(r.zscore('zset','c'))
发布了45 篇原创文章 · 获赞 1 · 访问量 2445

猜你喜欢

转载自blog.csdn.net/weixin_44225602/article/details/90691123