redis安装与介绍
安装
一般推荐次新版的最后一个发行版。https://redis.io/download
先安装gcc,
yum install gcc
tar xzf redis-3.2.3.tar.gz
cd redis-3.2.3
make
如果报zmalloc.h:50:31: 错误:jemalloc/jemalloc.h,则使用make MALLOC=libc
make install
或者指定安装目录:make PREFIX=/usr/local/redis install
cp redis.conf /etc/
通常安装redis后必做的第一件事是更改配置文件,让redis默认以守护进程的模式启动并设置密码:
vi /etc/redis.conf
将daemonize从no改为yes
requirepass aStrongStringPassword
proctect yes # 禁止远程无密码访问
其他生产需要注意的重要配置参见redis配置注意事项。
启动redis
# redis-server /etc/redis.conf
[root@localhost redis-3.2.4]# ps axu | grep redis
root 9711 0.0 0.0 136920 7556 ? Ssl 01:46 0:00 redis-server 127.0.0.1:6379
root 9715 0.0 0.0 112648 976 pts/0 S+ 01:46 0:00 grep --color=auto redis
[root@localhost redis-3.2.4]# redis-cli
127.0.0.1:6379> exit
查看redis整体情况
127.0.0.1:6379> client list
id=2 addr=127.0.0.1:38654 fd=5 name= age=197 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
127.0.0.1:6379> info
# Server
redis_version:3.2.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:8ffb5d8f8beeb710
redis_mode:standalone
os:Linux 2.6.32-431.23.3.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:18542
run_id:99f248a3c2cf7e0435489308dab0e4465262c592
tcp_port:6379
uptime_in_seconds:420
uptime_in_days:0
hz:10
lru_clock:13231573
executable:/root/redis-server
config_file:/etc/redis.conf # Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0 # Memory
used_memory:823008
used_memory_human:803.72K
used_memory_rss:7794688
used_memory_rss_human:7.43M
used_memory_peak:823008
used_memory_peak_human:803.72K
total_system_memory:16726306816
total_system_memory_human:15.58G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:9.47
mem_allocator:jemalloc-4.0.3 # Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1489626161
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok # Stats
total_connections_received:1
total_commands_processed:4
instantaneous_ops_per_sec:0
total_net_input_bytes:134
total_net_output_bytes:6028863
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0 # Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0 # CPU
used_cpu_sys:0.29
used_cpu_user:0.21
used_cpu_sys_children:0.00
used_cpu_user_children:0.00 # Cluster
cluster_enabled:0 # Keyspace
db0:keys=2,expires=0,avg_ttl=0
127.0.0.1:6379>
停止
#使用客户端
redis-cli shutdown
#因为Redis可以妥善处理SIGTERM信号,所以直接kill -9也是可以的
kill -9 PID
redis命令参考,建议整理过的,顺便参考官方的:http://redisdoc.com/
http://www.tuicool.com/articles/aQbQ3u
连接远程redis服务器
一般使用三方GUI,如redisdesktopmanager。
C:\Users\admin>cd /d d:\GMP\redis64-2.8.19
d:\GMP\redis64-2.8.19>redis-cli -h 192.168.230.128 -p 6379 -a "123456"
192.168.230.128:6379> set from-remote-key from-remote-value
OK
192.168.230.128:6379> keys *
1) "from-remote-key"
192.168.230.128:6379> get from-remote-key
"from-remote-value"
192.168.230.128:6379>
java客户端,官方推荐使用jedis、redisson(底层还是jedis,比如分布式锁,都是基于lua脚本整合setnx+expire)。spring boot 2.x开始,推荐lettuce。还有一个基于redis的java分布式锁实现redisson。
redis命令参考:http://www.redis.net.cn/tutorial/3501.html
性能测试
[ta5service_2_oracle@ta5host bin]$ ./redis-benchmark -t set -q -P 3 -n 10000000
SET: 195415.55 requests per second
50个并发请求,10000个请求,检测Redis性能:
# redis-benchmark -h localhost -p 6379 -c 50 -n 10000
监控读写
redis-cli -h xx -p 6379 -a 123455 monitor
它只能监控命令列表,意义不是很大。
慢日志
redis slowlog只保存在内存中,因此slowlog的效率很高,完全不用担心会影响到redis的性能。慢查询日志有两个参数:
- slowlog-log-slower-than: 单位微秒,指定redis执行命令的最大时间,超过将记录到慢查询日志中, 不能是负值。如果需要记录每条命令,设置为0就可以了。
- slowlog-max-len: 设置慢查询日志存储长度,如果达到最大值,最老的那日志将被清除掉。
这两个参数可以直接写到配置文件里面永久生效,也可以直接使用config set [参数名] [值]的方式临时修改:
CONFIG SET slowlog-log-slower-than 1000
CONFIG SET slowlog-max-len 10000
使用slowlog get命令,可以获取到所有的慢查询记录,也可以指定获取最后若干数量的记录。例如:
127.0.0.1:6379> SLOWLOG get 20
1) 1) (integer) 5
2) (integer) 1587967725
3) (integer) 13175
4) 1) "info"
2) 1) (integer) 4
2) (integer) 1585212402
3) (integer) 20347
4) 1) "SETEX"
2) "hsta:uid:44873D33567F9B8486613E226C6951EF"
3) "900"
4) "{\"email\":\"yangmc25005@hundsun.com\",\"id\":1,\"ip\":\"127.0.0.1\",\"lockScreenFlag\":false,\"logId\":0,\"realName\":\"123\",\"roles\":[1],\"sessio... (134 more bytes)"
3) 1) (integer) 3
2) (integer) 1582085396
3) (integer) 26045
4) 1) "SETEX"
2) "hsta:uid:35D104A11026AC46021BEF5B144D77BC"
3) "900"
4) "{\"id\":1,\"ip\":\"127.0.0.1\",\"lockScreenFlag\":false,\"logId\":0,\"realName\":\"123\",\"roles\":[1],\"sessionId\":\"35D104A11026AC46021BEF5B144D... (100 more bytes)"
4) 1) (integer) 2
2) (integer) 1579602866
3) (integer) 12625
4) 1) "SETEX"
2) "hsta:uid:3F8677B333FC0C6B6F0DF10EAF3EB22E"
3) "900"
4) "{\"email\":\"\",\"id\":1,\"ip\":\"127.0.0.1\",\"lockScreenFlag\":false,\"logId\":0,\"longTaCode\":\"F6\",\"mobile\":\"\",\"realName\":\"system\",\"roles\":[... (124 more bytes)"
5) 1) (integer) 1
2) (integer) 1577530601
3) (integer) 13496
4) 1) "EVAL"
2) "if (redis.call('exists', KEYS[1]) == 0) then redis.call('hset', KEYS[1], ARGV[2], 1); redis.call('pexpire', KEYS[1], ARGV[1]); r... (208 more bytes)"
3) "1"
4) "hsta:dlock:guid:d1ac0d25-2b0d-4335-b380-aea5b25ebf4d"
5) "1000000"
6) "745d2227-f22b-4475-b04e-bf7832092e31:1"
6) 1) (integer) 0
2) (integer) 1576038752
3) (integer) 24809
4) 1) "EVAL"
2) "if (redis.call('exists', KEYS[1]) == 0) then redis.call('hset', KEYS[1], ARGV[2], 1); redis.call('pexpire', KEYS[1], ARGV[1]); r... (208 more bytes)"
3) "1"
4) "hsta:dlock:guid:1655783790"
5) "3600000"
6) "d81d4dcb-bd34-4700-a0d4-2a2a83b366da:212"
返回的每个慢查询实体,都由6个字段组成,如果是4.0之前的版本只有前面4个字段。含义分别为:每个慢查询唯一标识(每个慢查询实体的ID都是唯一的,而且不会被重新设置,只会在redis重启后才会被重置);处理完命令后的,Unix 时间戳;执行命令所需要的时间,单位微秒;命令的参数列表,是个数组类型;发起请求的客户端IP和端口;客户端的名称(通过client setname client1 设置的客户端的名称)。
除此之外,还可以查看当前慢查询日志记录数:
127.0.0.1:6379> SLOWLOG LEN
(integer) 6
清空慢查询日志内容:
SLOWLOG RESET
GUI监控工具
https://github.com/nkrode/RedisLive,用python写的。
常见的优化建议
(1) Master 最好不要做任何持久化工作,如 RDB 内存快照和 AOF 日志文件
(2) 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性, Master 和 Slave 最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即: Master <- Slave1 <- Slave2 <- Slave3…
高可用及spring boot集成
redis各种高可用搭建及与spring boot的集成参见搭建高可用redis集群/sentinel及spring boot实现集群配置。
redis特性总结参考(核心实现原理参见redis核心机制深入解析):
- 丰富的数据结构(5种,它们可以解决不同场景的问题,有点类似recipe)
- 字符串(String)
- Redis字符串能包含任意类型的数据
- 一个字符串类型的值最多能存储512M字节的内容
- 利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用
- 使用APPEND命令在字符串后添加内容
- 列表(Linked List,而非数组实现)
- Redis列表是简单的字符串列表,按照插入顺序排序
- 你可以添加一个元素到列表的头部(左边:LPUSH)或者尾部(右边:RPUSH)
- 一个列表最多可以包含2^32-1个元素(4294967295,每个表超过40亿个元素)
- 在社交网络中建立一个时间线模型,使用LPUSH去添加新的元素到用户时间线中,使用LRANGE去检索一些最近插入的条目
- 你可以同时使用LPUSH和LTRIM去创建一个永远不会超过指定元素数目的列表并同时记住最后的N个元素
- 列表可以用来当作消息传递的基元(primitive),例如,众所周知的用来创建后台任务的Resque Ruby库
- 集合(Set)
- Redis集合是一个无序的,不允许相同成员存在的字符串合集(Uniq操作,获取某段时间所有数据排重值)
- 支持一些服务端的命令从现有的集合出发去进行集合运算,如合并(并集:union),求交(交集:intersection),差集, 找出不同元素的操作(共同好友、二度好友)
- 用集合跟踪一个独特的事。想要知道所有访问某个博客文章的独立IP?只要每次都用SADD来处理一个页面访问。那么你可以肯定重复的IP是不会插入的( 利用唯一性,可以统计访问网站的所有独立IP)
- Redis集合能很好的表示关系。你可以创建一个tagging系统,然后用集合来代表单个tag。接下来你可以用SADD命令把所有拥有tag的对象的所有ID添加进集合,这样来表示这个特定的tag。如果你想要同时有3个不同tag的所有对象的所有ID,那么你需要使用SINTER
- 使用SPOP或者SRANDMEMBER命令随机地获取元素
- 哈希(Hashes)
- Redis Hashes是字符串字段和字符串值之间的映射
- 尽管Hashes主要用来表示对象,但它们也能够存储许多元素
- HyperLogLog
- 非精确统计。
- 有序集合(Sorted Sets、zset,java的优先级队列或TreeMap)
- Redis有序集合和Redis集合类似,是不包含相同字符串的合集
- 每个有序集合的成员都关联着一个评分,这个评分用于把有序集合中的成员按最低分到最高分排列(排行榜应用,取TOP N操作)
- 使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作
- 元素是在插入时就排好序的,所以很快地通过评分(score)或者位次(position)获得一个范围的元素(需要精准设定过期时间的应用)
- 轻易地访问任何你需要的东西: 有序的元素,快速的存在性测试,快速访问集合中间元素
- 在一个巨型在线游戏中建立一个排行榜,每当有新的记录产生时,使用ZADD 来更新它。你可以用ZRANGE轻松地获取排名靠前的用户, 你也可以提供一个用户名,然后用ZRANK获取他在排行榜中的名次。 同时使用ZRANK和ZRANGE你可以获得与指定用户有相同分数的用户名单。 所有这些操作都非常迅速
- 有序集合通常用来索引存储在Redis中的数据。 例如:如果你有很多的hash来表示用户,那么你可以使用一个有序集合,这个集合的年龄字段用来当作评分,用户ID当作值。用ZRANGEBYSCORE可以简单快速地检索到给定年龄段的所有用户
- 复制(Replication, Redis复制很简单易用,它通过配置允许slave Redis Servers或者Master Servers的复制品)
- 一个Master可以有多个Slaves
- Slaves能通过接口其他slave的链接,除了可以接受同一个master下面slaves的链接以外,还可以接受同一个结构图中的其他slaves的链接
- redis复制是在master段是非阻塞的,这就意味着master在同一个或多个slave端执行同步的时候还可以接受查询
- 复制在slave端也是非阻塞的,假设你在redis.conf中配置redis这个功能,当slave在执行的新的同步时,它仍可以用旧的数据信息来提供查询,否则,你可以配置当redis slaves去master失去联系是,slave会给发送一个客户端错误
- 为了有多个slaves可以做只读查询,复制可以重复2次,甚至多次,具有可扩展性(例如:slaves对话与重复的排序操作,有多份数据冗余就相对简单了)
- 他可以利用复制去避免在master端保存数据,只要对master端redis.conf进行配置,就可以避免保存(所有的保存操作),然后通过slave的链接,来实时的保存在slave端
- LRU过期处理(Eviction)
- EVAL 和 EVALSHA 命令是从 Redis 2.6.0 版本(3.2引入了lua debugger,提高lua开发效率)开始的,使用内置的 Lua (非常轻巧,主要用于C和C++主程序环境)解释器,可以对 Lua 脚本进行求值
- Redis 使用单个 Lua 解释器去运行所有脚本,并且, Redis 也保证脚本会以原子性(atomic)的方式执行: 当某个脚本正在运行的时候,不会有其他脚本或 Redis 命令被执行。 这和使用MULTI / EXEC 包围的事务很类似。 在其他别的客户端看来,脚本的效果(effect)要么是不可见的(not visible),要么就是已完成的(already completed),具体示例可以参见https://my.oschina.net/zbnb/blog/3137491,总结的相当的不错,比dummy示例好多了
- LRU过期处理(Eviction)
- Redis允许为每一个key设置不同的过期时间,当它们到期时将自动从服务器上删除(EXPIRE)
- 事务
- MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务的基础
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断
- 事务中的命令要么全部被执行,要么全部都不执行,EXEC 命令负责触发并执行事务中的所有命令
- Redis 的 Transactions 提供的并不是严格的 ACID 的事务
- Transactions 还是提供了基本的命令打包执行的功能: 可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行
- Redis 还提供了一个 Watch 功能,你可以对一个 key 进行 Watch,然后再执行 Transactions,在这过程中,如果这个 Watched 的值进行了修改,那么这个 Transactions 会发现并拒绝执行
- 数据持久化
- RDB
- 特点
- RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
- 优点
- RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份
- RDB是一个紧凑的单一文件, 非常适用于灾难恢复
- RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能
- 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些
- 缺点
- 如果你希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话,那么RDB不适合,Redis要完整的保存整个数据集是一个比较繁重的工作
- RDB 需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒,AOF也需要fork,但是你可以调节重写日志文件的频率来提高数据集的耐久度
- AOF
- 特点
- AOF持久化方式记录每次对服务器写的操作
- redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整
- 优点
- 使用AOF 会让你的Redis更加耐久: 你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync
- AOF文件是一个只进行追加的日志文件,所以不需要写入seek
- Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写
- AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。 导出(export) AOF 文件也非常简单
- 缺点
- 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积
- 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB
- 选择
- 同时使用两种持久化功能
- 分布式
- Redis Cluster (Redis 3版本)
- Keepalived
- 当Master挂了后,VIP漂移到Slave;Slave 上keepalived 通知redis 执行:slaveof no one ,开始提供业务
- 当Master起来后,VIP 地址不变,Master的keepalived 通知redis 执行slaveof slave IP host ,开始作为从同步数据
- 依次类推
- Twemproxy
- 快、轻量级、减少后端Cache Server连接数、易配置、支持ketama、modula、random、常用hash 分片算法
- 对于客户端而言,redis集群是透明的,客户端简单,遍于动态扩容
- Proxy为单点、处理一致性hash时,集群节点可用性检测不存在脑裂问题
- 高性能,CPU密集型,而redis节点集群多CPU资源冗余,可部署在redis节点集群上,不需要额外设备
- 高可用(HA)
- Redis Sentinel(redis自带的集群管理工具 )
- 监控(Monitoring): Redis Sentinel实时监控主服务器和从服务器运行状态
- 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知
- 自动故障转移(Automatic failover): 当一个主服务器不能正常工作时,Redis Sentinel 可以将一个从服务器升级为主服务器, 并对其他从服务器进行配置,让它们使用新的主服务器。当应用程序连接到 Redis 服务器时, Redis Sentinel会告之新的主服务器地址和端口
- 单M-S结构
- 单M-S结构特点是在Master服务器中配置Master Redis(Redis-1M)和Master Sentinel(Sentinel-1M)
- Slave服务器中配置Slave Redis(Redis-1S)和Slave Sentinel(Sentinel-1S)
- 其中 Master Redis可以提供读写服务,但是Slave Redis只能提供只读服务。因此,在业务压力比较大的情况下,可以选择将只读业务放在Slave Redis中进行
- 双M-S结构
- 双M-S结构的特点是在每台服务器上配置一个Master Redis,同时部署一个Slave Redis。由两个Redis Sentinel同时对4个Redis进行监控。两个Master Redis可以同时对应用程序提供读写服务,即便其中一个服务器出现故障,另一个服务器也可以同时运行两个Master Redis提供读写服务
- 缺点是两个Master redis之间无法实现数据共享,不适合存在大量用户数据关联的应用使用
- 单M-S结构和双M-S结构比较
- 单M-S结构适用于不同用户数据存在关联,但应用可以实现读写分离的业务模式。Master主要提供写操作,Slave主要提供读操作,充分利用硬件资源
- 双(多)M-S结构适用于用户间不存在或者存在较少的数据关联的业务模式,读写效率是单M-S的两(多)倍,但要求故障时单台服务器能够承担两个Mater Redis的资源需求
- 发布/订阅(Pub/Sub)仅提供标准MQ的广播功能,不支持分区特性,不提供持久化功能。
- 监控:Redis-Monitor
- 历史redis运行查询:CPU、内存、命中率、请求量、主从切换等
- 实时监控曲线
- String
- 计数器应用
- List
- 取最新N个数据的操作
- 消息队列
- 删除与过滤
- 实时分析正在发生的情况,用于数据统计与防止垃圾邮件(结合Set)
- Set
- Uniqe操作,获取某段时间所有数据排重值
- 实时系统,反垃圾系统
- 共同好友、二度好友
- 利用唯一性,可以统计访问网站的所有独立 IP
- 好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐
- Hashes
- 存储、读取、修改用户属性
- Sorted Set
- 排行榜应用,取TOP N操作
- 需要精准设定过期时间的应用(时间戳作为Score)
- 带有权重的元素,比如一个游戏的用户得分排行榜
- 过期项目处理,按照时间排序
- 秒杀开始前30分钟把秒杀库存从数据库同步到Redis Sorted Set
- 用户秒杀库存放入秒杀限制数长度的Sorted Set
- 秒杀到指定秒杀数后,Sorted Set不在接受秒杀请求,并显示返回标识
- 秒杀活动完全结束后,同步Redis数据到数据库,秒杀正式结束
redis安装与介绍的更多相关文章
- Redis安装介绍
Redis安装介绍 一.Linux版本及配置 1. Linux版本:Red Hat Enterprise Linux 6虚拟机 2. 配置: 内存:1G:CPU:1核:硬盘:20G 二.Redis ...
- Redis介绍——Linux环境Redis安装全过程和遇到的问题及解决方案
一:redis的入门介绍: 首先贴出官网; 英文:https://redis.io/ 中文:http://www.redis.cn/ 1.是什么 --REmote DIctionary Server( ...
- Redis安装及实现session共享
一.Redis介绍 1.redis是key-value的存储系统,属于非关系型数据库 2.特点:支持数据持久化,可以让数据在内存中保存到磁盘里(memcached:数据存在内存里,如果服务重启,数据会 ...
- CentOS 6.6下Redis安装配置记录
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/120.html?1455855209 在先前的文章中介绍过redis,以下 ...
- Redis-cluster集群【第一篇】:redis安装及redis数据类型
Redis介绍: 一.介绍 redis 是一个开源的.使用C语言编写的.支持网络交互的.可以基于内存也可以持久化的Key-Value数据库. redis的源码非常简单,只要有时间看看谭浩强的C语言,在 ...
- Redis安装及HA(High Availability)配置
Redis是一种内存数据库,以KEY-VALUE(即键值对)的形式存储数据.这篇文章主要介绍的是Redis安装及配置,所以不对Redis本身作详细介绍了. 下载: http://redis.io/do ...
- Redis 安装 启动 连接 配置 重启
Linux下安装 ]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz ]# .tar.gz ]# cd redis- ]# ma ...
- Redis、Redis+sentinel安装(Ubuntu 14.04下Redis安装及简单测试)
Ubuntu下Redis安装两种安装方式: 1.apt-get方式 步骤: 以root权限登录,切换到/usr目录下. 接下来输入命令,apt-get install redis-server,如图: ...
- Redis 安装教程 (Windows 2.6.13 稳定版)
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
随机推荐
- 分组函数(groupby、itemgetter)
from itertools import groupby from operator import itemgetter d1={'name':'liuyi','age':25,'city':'SZ ...
- Python_if语句
1.if语句: color='红色' if color=='蓝色': print('我是蓝色') elif color=='红色': print('我是红色') else : print('未知') ...
- Opencv---零碎记录
OpenCV支持CPU和OpenCL推断,但OpenCL只支持Intel自家GPU,Satya设置了CPU推断模式(cv.dnn.DNN_TARGET_CPU) https://docs.opencv ...
- U盘损坏?
- OpenLayer3入门——[一]
一.OpenLayer3下载 首先下载OpenLayer3开发包,步骤如下: 下载地址https://github.com/openlayers/openlayers/releases/tag/v3. ...
- qsort中的函数指针,及函数解释
函数指针有何用 函数指针的应用场景比较多,以库函数qsort排序函数为例,它的原型如下: void qsort(void *base,size_t nmemb,size_t size , int(*c ...
- ES6学习记录(一)
Class类 Class的静态方法 类相当于实例的原型,所有在类中定义的方法,都会被实例继承.如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态 ...
- linux mint 19.1安装搜狗输入法
1.到搜狗拼音输入法官网下载Linux版. 2.使用dpkg命令安装deb软件包: $ sudo dpkg -i sogoupinyin_2.2.0.0108_amd64.deb 3.安装成功;也有可 ...
- sql server 事务和锁的作用
事务 事务就是作为一个逻辑工作单元的SQL语句,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上个节点.为了确保要么执行,要么不执行,就可以使用事务.而锁是实现事务 ...
- 差分约束 【bzoj2330】[SCOI2011]糖果
/*[bzoj2330][SCOI2011]糖果 2014年3月5日1,2761 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖 ...