1.Redis配置文件详解
1.1. 配置文件所有路径
Ubuntu
/ etc/ redis/ redis. conf
1.2设置连接密码
1 、requirepass 密码
2 . 注释掉本地IP绑定
3 . 关闭保护模式(把yes改成no)
protected- mode no
4 . 重启服务
sudo / etc/ init. d/ redis- server restart
2.数据类型
2.1.通用命令 适用于所有数据类型
select number
keys 表达式
type key
exists key
del key
rename key newkey
flushdb
flushall
2.2.字符串
特点 1 . 字符串,数字, 都会被转换成字符串来存储
2 . 以二进制的方式存储地内存中
字符串常用命令
set key value
get key
set key value nx
set key value ex seconds
mset key1 value1 key2 value2 key3 value3 . . .
mget key1 key2 key3 . . .
字符串常用命令2
strlen key
getrange key start stop
setrange key index value
append key value
数值操作
incrby key 步长
decrby key 步长
incr key
decr key
incrbyfloat key step
键的命名规范 mset user: name zhangsanfeng user: age 80 user: addr wudangshang
3.与python进行交互
安装 redis python包 pip3 install redis
建立连
In [ 1 ] : import redis
In [ 6 ] : r = redis. Redis( host= 'localhost' , port= 6379 , db= 0 , password= None ) In [ 7 ] : r. ping( ) Out[ 7 ] : True
常用方法
通用方法
r. keys( )
r. type ( name)
r. exists( 'myname' , 'spidy:urls' , 'a' , 'spidy:rusl1' )
r. delete( 'myname' , 'spidy:urls' , 'a' )
r. rename( 'spidy:urls' , 'newspidy:urls' )
字符串方法
r. set ( 'user2:name' , 'zhouzhiruo' )
r. set ( 'user2:name' , 'sf.zhang' , nx= True )
r. set ( 'user2:name' , 'sf.zhang' , xx= True )
r. set ( 'userx:name' , 'sf.zhang' , nx= True )
r. get( name)
user = {
'user:name' : 'zhangsanfeng' ,
'user:age' : 50 ,
'user:email' : 'sf.zhang@163.com'
}
r. mset( user)
r. mget( [ 'user:name' , 'user:age' , 'user:email' ] )
r. strlen( "user:name" )
r. getrange( "user:name" , 0 , - 1 )
r. setrange( "user:name" , 0 , '123' )
r. append( 'user:name' , '456' )
数值操作
r. incr( "user:age" , 10 )
r. decr( "user:height" , 10 )
r. incrbyfloat( 'age' - 10 )
4.列表类型
增
LPUSH key value1 value2 value3 . . .
RPUSH key value1 value2 value3 . . .
RPOPLPUSH src dst
LINSERT KEY AFTER| BEFORE value newValue
查
LRANGE KEY start stop
LLEN key
删
LPOP key
RPOP key
BLPOP key timeout
BRPOP key timeout
LTRIM key start stop
LTRIM mylist 0 2
改 LSET KEY index newValue
5.python操作列表
l. lpush( 'user:likes' , 'pingpong' , 'football' , 'sining' , 'dance' )
r. lpush( 'user:likes' , 'pingpong' , 'football' , 'sining' , 'dance' )
r. rpoplpush( 'user:likes' , 'user1:likes' )
r. linsert( 'user:likes' , 'before' , 'dance' , 'swiming' )
r. lrange( 'user:likes' , 0 , - 1 )
r. llen( 'user:likes' )
r. lpop( 'user:likes' )
r. rpop( 'user:likes' )
6.位图操作
1.命令
setbit key offset value
getbit key offset
bitcount key [ start end]
2.应用场景
用户名为key,上线的天作为offset,上线设置为1
用户名为 user1: login 的用户,今年第1 天上线,第30 天上线
SETBIT user1: login 0 1
SETBIT user1: login 29 1
BITCOUNT user1: login
3.python代码
r. setbit( 'user:login' , 2 , 1 )
r. getbit( 'user:login' , 2 )
r. bitcount( 'user:login' )
7.HASH 散列数据类型
定义
1 、由field和关联的value组成的键值对
2 、field和value是字符串类型
3 、一个hash 中最多包含2 ^ 32 - 1 个键值对
优点
1 、节约内存空间
2 、每创建一个键,它都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等)
3 、键越多,redis数据库在储存附件管理信息方面耗费内存越多,花在管理数据库键上的CPU也会越多
缺点
1 、使用二进制位操作命令: SETBIT、GETBIT、BITCOUNT等,如果想使用这些操作,只能用字符串键
2 、使用过期键功能:键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作
基本操作命令
HSET KEY field value
HSETNX KEY field value
HMSET KEY field value field value . . .
HLEN key
HEXISTS KEY field
HGET KEY field
HMGET KEY field field . . .
HGETALL key
HKEYS key
HVALS key
HDEL key field
HINCBY key filed increment
HINCBYFLOAT kye field increment
与python进行交互
hset( key, field, value)
hget( key, field)
hmset( key, mapping)
hmget( key, fields)
hgetall( key)
hkeys( key)
hvals( key)
hdel( key, * fields)
8.mysql + hash案例(用户信息管理)
实现原理
用户想要查询个人信息
1 、到redis缓存中查询个人信息
2 、redis中查询不到,到mysql查询,并缓存到redis
3 、再次查询个人信息
代码实现