Redis

作者: lvyz0207 | 来源:发表于2019-08-20 10:02 被阅读0次

Redis

Redis 是一个高性能的key-value数据库,支持主从同步。

配置文件

绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip    
bind 127.0.0.1

端⼝,默认为6379           
port 6379

是否以守护进程运⾏
如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
如果以⾮守护进程运⾏,则当前终端被阻塞
设置为yes表示守护进程,设置为no表示⾮守护进程
推荐设置为yes   
daemonize yes

数据⽂件

dbfilename dump.rdb

数据⽂件存储路径
dir /var/lib/redis

⽇志⽂件
logfile "/var/log/redis/redis-server.log"

数据库,默认有16个
database 16

其他相关命令

清库命令

FLUSHDB——清除当前库
FLUSHALL——清除所有库
redis默认有db0~db15之多。
select 1 切换数据库
del

redis-server --help
ps aux | grep redis 查看redis服务器进程
sudo kill -9 pid 杀死redis服务器
sudo redis-server /etc/redis/redis.conf 指定加载的配置文件
redis-cli

数据操作

1、string类型

命令 例如 描述
set key value set name zhangsan 设置键值(存在添加,不存在则修改)
setex key secondes value setex aa 3 aa 设置键值及过期时间,以秒为单位
mset key1 value key2 value ... mset a1 python a2 java a3 c 设置多个键值
append key value append a1 12345 追加值
get key get 'a1' 根据建获取值
mget key1 key2 ... get a1 a2 根据多个键获取多个值

2、键命令

命令 例如 描述
keys pattern keys * 查看所有键值(支持正则表达式 keys a*)
exists key1 exists a1 判断键是否存在,存在为1,不存在为0
type key type a2 判断键所对应的value的值
del key1 key2 del a1 a2 删除键及对应的值
expire key seconds expire a3 5 设置过期时间为5秒
ttl key ttl a3 查看有效时间(剩余多久过期)

与Python交互

连接 Redis
import redis

连接方式:redis提供了2个方法

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

官方推荐使用StrictRedis方法。
举例(普通连接):
import redis

#decode_responses=**True**  自动解码

##### r = redis.Redis(host='127.0.0.1',port=6379,password='123456',db=0,decode_responses=**True**) #默认数据库为0

##### r = redis.StrictRedis(host='10.10.2.14',port=6379,password='123456',decode_responses=**True**)
连接池:connection pool

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

举例(连接池):

pool = redis.ConnectionPool(host='127.0.0.1',port=6379,password='123456',decode_responses=**True**)

r = redis.Redis(connection_pool=pool)

一 STRING 字符串的操作

1. r.set 设置值

#在Redis中设置值,默认不存在则创建,存在则修改
r.set('name', 'zhangsan')
'''参数:
     set(name, value, ex=None, px=None, nx=False, xx=False)
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value)
     xx,如果设置为True,则只有name存在时,当前set操作才执行'''

2. r.get 获取值

r.get('name')

3. mset 批量设置值

#批量设置值
r.mset(name1='zhangsan', name2='lisi')
#或
r.mget({"name1":'zhangsan', "name2":'lisi'})

4. mget(keys, *args) 批量获取

#批量获取
print(r.mget("name1","name2"))
#或
li=["name1","name2"]
print(r.mget(li))

5. getset 设置新值,打印原值

#设置新值,打印原值
getset(name, value)  

print(r.getset("name1","wangwu")) #输出:zhangsan
print(r.get("name1")) #输出:wangwu

6. getrange 根据字节获取子序列

#根据字节获取子序列
getrange(key, start, end) 

r.set("name","zhangsan")
print(r.getrange("name",0,3))#输出:zhan

7. setrange 修改字符串内容,从指定字符串索引开始向后替换,如果新值太长时,则向后添加

#修改字符串内容,从指定字符串索引开始向后替换,如果新值太长时,则向后添加
setrange(name, offset, value) 

r.set("name","zhangsan")
r.setrange("name",1,"z")
print(r.get("name")) #输出:zzangsan
r.setrange("name",6,"zzzzzzz")
print(r.get("name")) #输出:zzangszzzzzzz

8. strlen(name) 返回name对应值的字节长度

#返回name对应值的字节长度(一个汉字3个字节)
r.set("name","zhangsan")
print(r.strlen("name")) #输出:8

9. incr 值的累加 amount为累加的值

#自增mount对应的值,当mount不存在时,则创建mount=amount,否则,则自增,amount为自增数(整数)
incr(self, name, amount=1) 

print(r.incr("mount",amount=2))#输出:2
print(r.incr("mount"))#输出:3
print(r.incr("mount",amount=3))#输出:6
print(r.incr("mount",amount=6))#输出:12
print(r.get("mount")) #输出:12

10. append 在name对应的值后面追加内容

#在name对应的值后面追加内容
append(name, value)

r.set("name","zhangsan")
print(r.get("name"))    #输出:'zhangsan
r.append("name","lisi")
print(r.get("name"))    #输出:zhangsanlisi

11.type 查看类型

r.type(name)

案例

页面点击数
假定我们对一系列页面需要记录点击次数。例如论坛的每个帖子都要记录点击次数,而点击次数比回帖的次数的多得多。如果使用关系数据库来存储点击,可能存在大量的行级锁争用。所以,点击数的增加使用redis的INCR命令最好不过了。
当redis服务器启动时,可以从关系数据库读入点击数的初始值(1237这个页面被访问了34634次)

>>> r.set("visit:1237:totals",34634)

True

每当有一个页面点击,则使用INCR增加点击数即可。

>>> r.incr("visit:1237:totals")

34635

>>> r.incr("visit:1237:totals")

34636

页面载入的时候则可直接获取这个值

>>> r.get ("visit:1237:totals")

'34636'

Hash、List、Set、Zset及其他操作,后续需要持续更新!

相关文章

网友评论

      本文标题:Redis

      本文链接:https://www.haomeiwen.com/subject/jjsusctx.html